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发送它时,我的readHandler似乎在第一次浮动后开始读取乱码。这似乎可以通过使用另一个追加函数array.append(float.bytes, sizeof(float));
来解决。有谁知道:
\o
被添加有关?array.append(float.bytes, sizeof(float));
方法会有效吗?这意味着,如果我发送数组,我会发送10 * 4字节的原始浮点值吗?答案 0 :(得分:0)
您(无意中)选择的append()
重载将传递的参数视为以零结尾的字符串。显然,float
值似乎在某个时刻包含零字节,因此append()
函数最终会停止读取。
要附加二进制数据,我使用QByteArray::fromRawData()
获取QByteArray
然后追加它:
float f = 3.14;
QByteArray a = QByteArray::fromRawData(&f, sizeof(f));
QByteArray b;
b += a;
这使你的意图变得清晰,它避免了union
技巧,无论如何都是未定义的行为。