gpt4 book ai didi

c++ - 使用 C 函数填充 QByteArray

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:25 25 4
gpt4 key购买 nike

我很好奇将已适当调整大小的 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 的推荐方法吗?有没有更好的方法不需要多份数据?

谢谢!

最佳答案

非常安全,QByteArray 有两个方法获取数据,constData()data() 你可以传递数据并处理它作为 char * 缓冲区,并在 c 函数中毫无问题地使用它。

在缓冲区溢出等情况下会发生的相同问题也会发生,因此您必须像在 c 中一样小心。

关于c++ - 使用 C 函数填充 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com