gpt4 book ai didi

c - 如何使用 htonl 将小端转换为大端

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:14 24 4
gpt4 key购买 nike

我有包含以下元素的结构。此外,结构已完全填充。

typedef struct {
uint16_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint8_t e[6];
} ad;

这个结构是小端的。我的意思是当我在我的 big endian 机器上打印这个结构时,我得到以下内容

如果 c=1,d=2,e[0]=3,e[1]=4。我明白了

c=4,d=3,e[0] = 2 和 e[1]=1。

a 和 b 交换了。进一步,e[1]与c交换,e[0]与d交换。

我正在使用如下所示的 htonl 函数。但是,它不起作用,任何人都可以建议我一个好的答案。

最佳答案

Endian-ness 仅适用于单个字段,不适用于结构字段的顺序。在您列出的字段中,只有定义为 uint16_t 的多字节整数字段将由字节序控制,而 uint8_t 是单字节的,因此无需考虑排序问题。无论字节顺序如何,单字节值数组也将保持相同的长度。

要转换 uint16_t,您需要使用 htons() 函数而不是 htonl()。 htonl() 函数需要一个 long,通常至少为 4 个字节。

uint16_t netShort = htons(uint16_t hostShort);

或者对于您的示例结构:

struct.a = htons(struct.a);
struct.b = htons(struct.b);

关于c - 如何使用 htonl 将小端转换为大端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637447/

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