面试题:请简述大端字节序与小端字节序的概念,设计一个程序来判断当前机器的字节序。
概念:大端字节序就是低位地址存放高位字节,高位地址存放低位字节,小端则与之相反。
例:0x 00 00 00 01
小端字节序:低字节放在低地址
01 | 00 | 00 | 00 |
大端字节序:低字节放在高地址
00 | 00 | 00 | 01 |
低地址 高地址
代码实现:
#include <stdio.h> #include <iostream> using namespace std; int main() { int num = 1; if(*(char*)&num ==1) { printf("小端字节序\n"); } else { printf("大端字节序\n"); } return 0; }
//联合体union的存放顺序是从低地址开始存放的 #include <stdio.h> #include <iostream> using namespace std; union{ int 1 = 1; char c[sizeof(int)]; }num; int main() { if(num.c[0] == 0) { printf("小端字节序\n"); } else { printf("大端字节序\n"); } return 0; }
#include <iostream> using namespace std; union A{ char c; int a }A; int main() { A.a = 1; if(A.c == 1) { cout<<"小端字节序"<<endl; } else { cout<<"大端字节序"<<endl; } return 0; }