int main()
{
uint8_t var = 9;
var = ntohs(var);
printf("var=%u",var)
}
这段代码在 Little Endian 中产生 var 值为 0,但在 Big Endian 中 9 成为可能的答案。
据我猜测,因为我们无法在 1 字节字段上应用 ntohs!我们可以吗?有没有案例?
我的linux机器是Little Endian,x86架构,Intel
感谢您的提前答复。
最佳答案
在小端机器上,0 是预期输出。在大端机器上,它将输出 9。
当值为 0x09 的 var
传递给 ntohs
时,它首先会提升为 uint16_t
,这是参数,因此该参数的值为 0x0009。转换后,该函数以 uint16_t
类型返回值 0x0900。
然后将该值分配给 uint8_t
,但值 0x0900 超出范围。然后,本质上仅使用该值的最低位字节(即 0)将其转换为较小的值。
如果您在大端机器上运行相同的代码,则 ntohs
函数基本上不执行任何操作,并返回与给定值相同的值,在本例中为 9。
关于ntohs() 可以应用于 uint8_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51543643/