gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:13:26 25 4
gpt4 key购买 nike

我将使用 QTcpSocket 以这种格式从服务器接收长度分隔的帧:-

+----------+--------------------------------+
| len: u32 | frame payload |
+----------+--------------------------------+
其中 u32 是以 Big-Endian 格式编码的 32 位无符号整数。根据配置,它也可以是 Little Endian 但我会在客户端事先了解字节序。
如何转换此 char* 的前 4 个字节数组或 QByteArray到 32 位 unsigned int ?
阅读帧后,我需要以相同的格式发送消息。因此,如果我有长度为 20 字节的消息,我如何将 20 作为 32 位无符号整数写入 QByteArray 或 char* 以大/小端格式?

最佳答案

您可以使用 Qt 的 QtEndian实用功能来实现这一点。
例如,如果您有一个 quint32 (或 uint32_t )并希望以 little-endian 格式将该值写入 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);
Big-endian 读/写工作相同,只需替换子字符串 LittleBig在函数名中。

关于c++ - 如何在 C++ 中将 Big/Little-Endian 字节转换为整数,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66362937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com