【问题标题】:Using a C function to populate a QByteArray使用 C 函数填充 QByteArray
【发布时间】:2015-03-16 15:31:36
【问题描述】:

我很好奇将已正确调整大小的QByteArray 的数据指针传递给将在其中填充内存的 c 函数是否安全。

我认为这不应该是一个问题,但我觉得这样做有点恶心。

SpeexBits bits;
void *dec_state;
int bufferPosition = 0;
const int SAMPLES_PER_SEC = 32000;
const int BUFFER_LEN_SECONDS = 5;
const int FRAME_SIZE_BYTES = SAMPLES_PER_SEC / (1000 / 20) * sizeof(int16_t);

QByteArray outBuf;
outBuf.resize(SAMPLES_PER_SEC * sizeof(int16_t) * BUFFER_LEN_SECONDS);

...

speex_bits_read_from(&bits, msg->payload, msg->size);
speex_decode_int(dec_state, &bits, outBuf.data() + bufferPosition);
bufferPosition += FRAME_SIZE_BYTES;

...

<playback>

虽然我认为这应该可行,但感觉不对,但是,我不想制作数据的多个副本,只是为了使用插入方法调用填充 QByteArray。所以我想我的问题是,我可以安全地做到这一点吗?这是从函数中填充QByteArray 的推荐方法吗?有没有更好的方法不需要数据的多个副本?

谢谢!

【问题讨论】:

    标签: c++ c qt


    【解决方案1】:

    非常安全,QByteArray 有两种获取数据的方法,constData()data() 可以传递数据并将其视为char * 缓冲区,并将其用作c 函数中的一个没有问题。

    在缓冲区溢出等情况下会出现同样的问题,所以你必须像在 c 中一样小心。

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2016-02-18
      相关资源
      最近更新 更多