cod*_*out 9 c casting endianness
考虑一下这段代码:
int a=0x10000001;
char b;
b=(char)a;
printf("%#x \n",b);
Run Code Online (Sandbox Code Playgroud)
在我的电脑上,它打印0x01,我并不感到惊讶.它如何在BIG ENDIAN机器上运行?我希望它会打印出来0x10000001
.我对吗?
我浏览了书籍和网页,但我没有找到关于铸造操作如何真正处理内存的明确信息.
Jur*_*aho 15
不,如果可能的话,像所讨论的那样投射会保留价值,并且不依赖于记忆表示.
如果要重新解释内存表示,则需要转换指针.然后它将取决于字节顺序:
b=*((char*)&a);
Run Code Online (Sandbox Code Playgroud)