【发布时间】:2020-01-13 09:55:39
【问题描述】:
我在 Mac 上用 C 做一些实验(应该是小端架构),我注意到一个奇怪的事实,试图打印 uint16_t 变量的低字节和高字节。
使用值 65534(十六进制的 0xFFFE,大端),使用下面的代码,我期望第一个 printf 会打印 0xFE FF,而第二个 0XFF FE。 结果却相反,为什么呢?
int main(){
uint16_t x=65534;
uint16_t y=htons(x);
printf("%02x %02x\n",((uint8_t*)&x)[0],((uint8_t*)&x)[1]); //prints fe ff
printf("%02x %02x\n\n",((uint8_t*)&y)[0],((uint8_t*)&y)[1]); // prints ff fe
printf("%02x %02x\n",x>>8,(uint8_t)x);//prints ff fe
printf("%02x %02x\n",y>>8,(uint8_t)y);//prints fe ff
return 0;
}
【问题讨论】:
-
"我原以为第一个 printf 会打印 0xFE FF" 确实如此,那么问题是什么?
标签: c hex byte endianness