【发布时间】:2018-02-25 20:21:52
【问题描述】:
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?
}
嘿,我正在尝试构建一个 QByteArray 以在稍后阶段通过 TCP 存储和发送,通过QTcpSocket::write(QByteArray);。但是,数组的长度增加不是我所期望的,当我通过 Tcp 发送它时,我的 readHandler 似乎在第一次浮点数之后开始读取乱码。这似乎可以通过使用另一个附加函数array.append(float.bytes, sizeof(float)); 来解决。有谁知道:
- 首先出了什么问题?为什么添加 4 字节字符会导致 9 字节长的 QByteArray?是否与添加
\o有关? -
array.append(float.bytes, sizeof(float));方法有效吗?意思是,如果我发送数组,我会发送 10*4 字节的原始浮点值吗?
【问题讨论】:
-
QByteArray::append怎么会知道你想准确地追加 4 个字节?它需要一个以 nul 结尾的 c 字符串,而不是一大块二进制字节。 -
好点。我没想到。所以我基本上是在读取 QByteArray 的随机内存?这是否意味着
QByteArray::append(char*, len)将正确读取二进制字节块? -
QByteArray &QByteArray::append(const char *str, int len)是您所需要的。
标签: c++ qt qbytearray