C++ 快速将quint16/无符号short追加到QByteArray
在我的项目中,我正在使用QbyteArray在程序运行时向它们添加数据。大多数情况下,使用C++ 快速将quint16/无符号short追加到QByteArray,c++,qt,qbytearray,C++,Qt,Qbytearray,在我的项目中,我正在使用QbyteArray在程序运行时向它们添加数据。大多数情况下,使用QByteArray::append()可以很好地追加一个简单的quint8。但是当追加quint16时,只追加1个字节而不是2个字节 QByteArray ba = QByteArray::fromHex("010203"); quint number(300);//300 in hex is 012c ba.append(number);//What should be appended instea
QByteArray::append()
可以很好地追加一个简单的quint8
。但是当追加quint16
时,只追加1个字节而不是2个字节
QByteArray ba = QByteArray::fromHex("010203");
quint number(300);//300 in hex is 012c
ba.append(number);//What should be appended instead of just number?
//the current incorrect result is
ba.toHex() == "0102032c"
//the desired result is
ba.toHex() == "010203012c"
我已经尝试过了,但它只是将值作为字符串(4字节)插入:
我应该向QByteArray追加什么,以便“number”的两个字节都被追加,而不仅仅是一个字节?此外,最好使用尽可能快的方法,因为该程序需要很好的性能。所以绝对不能转换为qstring
感谢您的时间。QByteArray本身只支持追加字节;要附加固定大小整数类型的大端数表示形式,您可以构建自己的
运算符,或者在附加quint16
时,您期望什么样的端数?我相信大端数。应该是012c获取附录阅读文档我看不到任何QByteArray.append(quint)
…为什么不直接使用QList
?因为QByteArray不仅仅是帖子中所说的一堆quint16。工作完美无瑕。非常感谢你的快速回答:)我不想问这个问题,但是倒回去怎么样?那么从包含“012c”的QByteArray到qint16?我已经尝试了ba.mid(3,2).toUShort(0,16),但是这不起作用,因为它不查看二进制数据。要将大端值读取为整数,通常的方法是“对于读取的每个字节,将目标左移8,或将读取的字节移到目标中”。使用跟踪读取位置的实际流更容易做到这一点。
ba.append(QByteArray::number(number, 16));
QByteArray &operator<<(QByteArray &l, quint8 r)
{
l.append(r);
return l;
}
QByteArray &operator<<(QByteArray &l, quint16 r)
{
return l<<quint8(r>>8)<<quint8(r);
}
QByteArray &operator<<(QByteArray &l, quint32 r)
{
return l<<quint16(r>>16)<<quint16(r);
}
QByteArray b;
b<<quint16(300); // appends 0x01 0x2c
b<<quint8(4); // appends 0x04
b<<quint16(4); // appends 0x00 0x04
b<<quint32(123456); // appends 0x00 0x01 0xe2 0x40
b<<quint8(1)<<quin16(2)<<quint32(3); // appends 0x01 0x00 0x02 0x00 0x00 0x00 0x03
QByteArray b;
b<<1;