int i = 259; /* 03010000 in Little Endian ; 00000103 in Big Endian */
char c = (char)i; /* returns 03 in both Little and Big Endian?? */
Run Code Online (Sandbox Code Playgroud)
在我的计算机中它将03分配给char c并且我有Little Endian,但我不知道char转换是读取最低有效字节还是读取i变量指向的字节.
cni*_*tar 14
Endianness实际上并没有改变任何东西.它不会尝试存储其中一个字节(MSB,LSB等).
char是无符号的,它将环绕.假设8位字符259%256 = 3char已签名,则结果是实现定义的.谢谢pmg:C99标准中的6.3.1.3/3由于您从较大的整数类型转换为较小的整数类型,因此无论字节顺序如何,它都是最不重要的部分.如果你转换指针代替,不过,这将需要在地址字节,这将取决于端标记.
因此,c = (char)i分配给最不显著字节c,但c = *((char *)(&i))将在地址分配的第一个字节i到c,这将是只小端系统同样的事情.