如何在 C++ 中将 Big/Little-Endian 字节转换为整数,反之亦然

너를 *_*속였다 3 c++ qt endianness

我将使用 QTcpSocket 从服务器接收长度分隔的帧,格式如下:-

+----------+--------------------------------+
| len: u32 |          frame payload         |
+----------+--------------------------------+
Run Code Online (Sandbox Code Playgroud)

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

如何将该char*数组的前 4 个字节转换QByteArray为 32 位 unsigned int ?

阅读框架后,我需要以相同的格式发送消息。因此,如果我有长度为 20 字节的消息,如何将 20 作为 32 位无符号 int 以大/小端格式写入 QByteArray 或 char* ?

Jer*_*ner 6

您可以使用 Qt 的QtEndian实用函数来完成此任务。

例如,如果您有一个quint32(或uint32_t) 并希望以小端格式将该值写入 char 数组的前四个字节:

const quint32 myValue = 12345;
char frameBuffer[256];
qToLittleEndian(myValue, frameBuffer);
Run Code Online (Sandbox Code Playgroud)

...或者,以小端方式读取 char 数组的前四个字节quint32(或uint32_t):

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

大尾数读取/写入的工作方式相同,只需将函数名称中的子字符串替换Little为即可。Big