用C语言,如何判断主机是 大端仍是小端(字节序)

http://www.cnblogs.com/52php/p/6114643.htmlphp

 

所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。好比 0x12345678 在大端机上是 12345678,在小端机上是 78564312,而一个主机是大端仍是小端要看CPU类型以及运行在上面的操做系统。同一款CPU在不一样的操做系统使用的大小端状况是不一样的。固然咱们一般使用的 x86 + windows是小端。html

测试大小端通常使用 union的特性。union是一个联合体,全部变量公用一块内存,只是在不一样的时候解释不一样。其在内存中存储是按最长的那个变量所须要的位数来开辟内存的windows

#include <stdio.h>测试

#include <stdbool.h>
 
union  {
     int  number;
     char  s;
} test;
 
bool  testBigEndin() {
     test.number = 0x01000002;
     return  (test.s == 0x01);
}
 
int  main( int  argc,  char  **argv) {
     if  (testBigEndin()) {
         printf ( "big" );
     else  {
         printf ( "small" );
     }
}

个人 Mac输出: smallspa

其中 union的实际内存长度是int,即一个字,在32位机上是32位。而char是一个Byte(8位),只会取第一个低地址字节。因此它的值能够用来判断大小端。操作系统

 

舒适提示:电脑读取内存数据时,是(从左到右)从 低位地址 到 高位地址

相关文章
相关标签/搜索