1.系统的大小端一般什么时候能够遇见
->网络通信过程中
->在Linux类操作系统之间程序的移植问题。
2. Endian表示数据在存储器中的存放顺序
大端:高位存在低地址,低位存在高地址
小段:高位存在高地址,低位存在低地址(Intel X86/ARM)
举例验证
1.在Intel X86的Ubuntu测试
int main() { int x = 0x11100100; int b = 0; printf("0x%x 0x%x \r\n", &x, &b; printf("%d\r\n", *((char *)&x)); printf("%d\r\n", *(((char *)&x)+1)); printf("%d\r\n", *(((char *)&x)+2)); printf("%d\r\n", *(((char *)&x)+3)); } 结论:小端的结果是 0 1 16 17 大端则相反 |
上个代码内存的布局问题
2. 利用union变量来验证
int checkCPU() { union w{ int a; char b; }c; c.a = 1; return (c.b == 1); } int main() { int flag = checkCPU(); if( 1 == flag ) { printf("littel-endian\r\n"); }else { printf("big-endian\r\n"); } |
相关知识:
union变量的存储
int main() { union w{ int a; char b; }c; c.a = 0x11100100; printf("%d %d %d %d\r\n", *((char *)(&(c.b))), *((char *)(&(c.b)+1)), *((char *)(&(c.b)+2)), *((char *)(&(c.b)+3))); } 结果:0 1 16 17 结论:对象的地址指代的是低地址,变量向高地址空间进行存储(测试于小端的平台,大端的平台还未进行测试) |