ntohs() 可以应用于 uint8_t

标签 c byte endianness

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/

相关文章:

python - 如何在 python 3 中将字节文字列表转换为字符串文字?

c# - 用于密码算法的 UI 字节数组操作

c++ - 将 32 位大端有符号整数转换为有符号小端整数

endianness - 小端与大端?

c++ - 为什么 InterlockedAdd 在 vs2010 中不可用?

C sscanf (fscanf) 行与行的行为不同

c - 我可以假设结构字段按顺序放置并且没有填充吗?

arrays - 在 Go 中,如何将结构转换为字节数组?

javascript - 制作 JavaScript 类型化数组 "Endian Safe"的最佳做法是什么?

c++ - 如何将python dict发送到C++