我有以下元素的struct。另外结构填补了填充。我如何使用htonl将little endian转换为big endian
typedef struct {
uint16_t a;
uint16_t b;
uint8_t c;
uint8_t d;
uint8_t e[6];
} ad;
这个结构是一个小端。如果c = 1,d = 2,e [0] = 3,e [1] = 4,我的意思是当我在我的big endian机器上打印此结构时,我得到以下
。 我得到
c = 4,d = 3,e [0] = 2和e [1] = 1。
a和b被交换。 此外,e [1]与c交换,e [0]与d交换。
我正在使用htonl
函数,如下所示。但是,它不工作,任何人都可以给我一个很好的答案。
你如何打印它,什么是“像以下”?标准规定了'struct'成员放置在内存中的顺序,不要指望任何编译器因为字节顺序而违反。 –
我不明白如何endenianess可能会导致元素交换。还有其他的错误。显示你的代码。 –
这不是一个endian问题。如果LE计算机上的'uint16_t'值为'1',则在BE机器上变为'256'(或者如果您愿意,则为0x0100),则会发生endian问题。你所看到的是与你“发送”的内容不匹配的数据。 Endian差别不会交换结构元素(除非你正在调用'*((uint32_t *)&s)= htonl(*(uint32_t *)&s)'这样的愚蠢行为,其中's'是一个像上面那样的结构。然后所有投注都关闭)。 – WhozCraig