简述一下什么是大小端字节序,并设计程序判断当前机器的字节序;-百度面试题-10分
解:
大端字节序:
指数据的低位字节内容保存在内存的高地址处,数据的高位字节内容保存在内存的低地址处;
假设一个16位的整数 0x1234
在内存中的地址从 0x1000
开始,那么在大端模式下,它在内存中的存储情况如下:
内存地址 存储的数据
0x1000 0x12
0x1001 0x34
即正序
小端字节序:
指数据的低位字节内容保存在内存的低地址处,数据的高位字节内容保存在内存的高地址处
同样以16位的整数 0x1234
为例,在小端模式下,它在内存中的存储情况如下:
内存地址 存储的数据
0x1000 0x34
0x1001 0x12
即倒序
判断机器字节序
#include <stdio.h>
int main() {
unsigned int test = 1; // 设置整数值为1
char *p = (char *)&test;//test为4个字节,强制转换为char*取第一个字节,如果第一个字节是00则是大端,如果第一个字节是01则是小端;
// 如果*p是1,那么系统是小端;如果是0,则是大端
if (*p) {
printf("Little-Endian\n");
} else {
printf("Big-Endian\n");
}return 0;
}
方法二:联合体:联合体成员同时占用一块空间,int开辟四个字节大小,赋值为1,char访问一个字节,如果为0说明大端,如果为1说明小端
#include<stdio.h>
int main() {
union {
char i;
int a;
}s;
s.a = 1;
if (s.i == 1)printf("xiaoduan");
if(s.i==0)printf("daduan");
}