QbyTearray :: append()导致意外的QbyTearray尺寸

QByteArray::append() leads to unexpected QByteArray sizes

本文关键字:QbyTearray 意外 尺寸 append      更新时间:2023-10-16
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技巧,无论如何,这是不确定的行为。