如何在C ++中将大/小端字节转换为整数,反之亦然

3
我将使用 QTcpSocket 从服务器接收长度限定帧,格式如下:-
+----------+--------------------------------+
| len: u32 |          frame payload         |
+----------+--------------------------------+

其中u32是32位无符号整数,以Big-Endian格式编码。根据配置,它也可以是Little Endian,但我会在客户端事先了解字节序。

如何将char*数组或QByteArray的前4个字节转换为32位无符号整数?

读取帧后,我需要以相同的格式发送消息。因此,如果我有20字节长度的消息,则如何将20写入32位无符号整数的QByteArray或char*中,并以大/小端格式进行编码?


1
FYI: SO: QString in Persian - Scheff's Cat
2个回答

6
您可以使用Qt的QtEndian实用程序函数来完成此操作。
例如,如果您有一个quint32(或uint32_t)并希望以小端格式将该值写入char数组的前四个字节:
const quint32 myValue = 12345;
char frameBuffer[256];
qToLittleEndian(myValue, frameBuffer);

...或者,作为替代方案,将char数组的前四个字节读入一个小端quint32(或uint32_t)中:

const char frameBuffer[256] = {0x01, 0x00, 0x00, 0x00};
quint32 myValue = qFromLittleEndian<quint32>(frameBuffer);

大端读/写操作的方式与小端相同,只需在函数名称中将子字符串Little替换为Big即可。

不要忘记包含 #include <QtEndian> - Vinu Raja Kumar C

4

操作步骤如下:

bytearray -> stream ->setorder -> serialize to variable


QByteArray newData = ....;
QDataStream stream(newData);
stream.setByteOrder(QDataStream::LittleEndian); // or BigEndian
stream >> variable;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接