使用 C 函数填充 QByteArray
Using a C function to populate a QByteArray
我很好奇将已正确调整大小的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++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 有没有办法在一行中填充矢量图
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 使用结构成员指针在C++中填充结构
- 流填充字符的默认定位
- 使用不同算法的 PKCS1v15 填充进行加密 ++ 签名
- C++:使用缓冲区中的数据填充结构
- 如何将零填充的多维数组传递给 C++ 中的函数?
- Cryptopp:获取密码输入的填充字符串
- 填充上编译器生成的复制构造函数之间的不一致
- RcppEigen 模板化函数,用于填充单位法线
- 使用 C 函数填充 QByteArray