//way 1union { unsigned long biths; unsigned char bytes[4]; } theValue; //way 2ndtypedef char* bytePointer;void showBytes(bytePointer p, int len){ int i; for(i = 0; i < len; ++i) printf("%.2x -> %p", p[i], p+i);} void showShort(short svar){ showBytes((bytePointer) &svar, sizeof(short));} int main(){ theValue.bytes[0] = 0; theValue.bytes[1] = 1; theValue.bytes[2] = 0; theValue.bytes[3] = 0; int isLittleEndian; isLittleEndian = theValue == 256;//为真则为小端,否则为大端 short svar = 01; showShort(svar);//按字节地址从低地址到高地址打印字节内容 }
1.关于字节序列。
2.以上倒很清楚,要注意的是一个字节占据8个位。printf格式输出如果不熟悉的话(像我现在就不太熟悉),会有潜在的误会。
例如256.是占据第二个字节的最低位。因为第一个字节各位全为0.
十进制: 1, 2, 4, 8; 16, 32, 64, 128; 256 .... 1依次在二进制各位的十进制数的大小。
二进制: 0000 0000 0001 0000
十六进制:0 0 1 0
最终showBytes()中printf的%x是按照十六进制的方式输出。
3.首先要肯定自己是对的,就是这些基础知识是掌握了的。不要随意推翻自己。
本人有点自卑的习惯。这个毛病要改掉。慢慢改掉。
4.但是我用的是苹果电脑,我一直预想输出是大端的样子。可殊不知,我才想到苹果支持intel,用了它的cpu:
dogdot$ sysctl machdep.cpu
machdep.cpu.max_basic: 13
machdep.cpu.max_ext: 2147483656
machdep.cpu.vendor: GenuineIntel
machdep.cpu.brand_string: Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz
时间: 2024-10-13 06:53:30