QbyTearray :: append()导致意外的QbyTearray尺寸
QByteArray::append() leads to unexpected QByteArray sizes
QByteArray array;
union {
char bytes[sizeof(float)];
float value;
} myFloat;
for (int i = 0; i < 10; i++) {
myFloat.value = 2.3 + i;
array.append(myFloat.bytes);
qDebug() << array.length(); //9, 18, 27, etc, instead of 4, 8, 12, etc?
}
嘿,我正在尝试通过QTcpSocket::write(QByteArray);
构建一个QBYTEARRAY来存储并通过TCP发送。但是,阵列的长度增加不是我的预期,当我通过TCP发送它时,我的回教徒似乎在第一个浮点后开始阅读Gibberish。这似乎通过使用另一个附录函数array.append(float.bytes, sizeof(float));
来解决。有人知道:
- 首先出了什么问题?为什么添加4个字节字符会导致9个字节更长的QByTearray?这与添加了
o
的有关吗? -
array.append(float.bytes, sizeof(float));
方法可以工作吗?意思是,如果我发送数组,我会发送10*4个字节的原始浮点值吗?
append()
超载您(无意间)选择传递的参数将其视为零端的字符串。显然,float
值在某个时候似乎包含零字节,因此append()
函数最终停止读数。
要附加 binary 数据,我将使用QByteArray::fromRawData()
获取QByteArray
然后附加:
float f = 3.14;
QByteArray a = QByteArray::fromRawData(&f, sizeof(f));
QByteArray b;
b += a;
这使您的意图清晰,并且避免了union
技巧,无论如何,这是不确定的行为。
相关文章:
- 在C++中对T*类型执行std::move的意外行为
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 处理除以零会导致<csignal>意外行为
- vscode下的Arduino代码出现意外编译错误
- 使用++运算符会导致意外的结果
- 套接字读取后,我在缓冲区中看到意外输入
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 使用vscode调试时,GDB意外退出
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 尝试将字符串/字符转换为整数会产生意外结果
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- C++标头错误 C2238 意外标记";"
- C++中意外的多头值
- vector.size() 在比较中意外工作
- 使用 malloc() 时出现意外大小
- 多线程程序中出现意外的内存泄漏
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 为什么static_cast基础类型的枚举类int8_t获得意外值?
- 字符串比较中的意外输出
- QbyTearray :: append()导致意外的QbyTearray尺寸