震惊!C语言分辨大小端竟如此简单
c语言有个面试题,叫分辨电脑是大端还是小端。
大端模式,是指数据的高字节保存在地址空间的低地址中,而数据的低字节保存在地址空间的高地址中
小端模式,是指数据的高字节保存在地址空间的高地址中,而数据的低字节保存在地址空间的低地址中
怎么分辨?上代码
#include<stdio.h>
int main(void){
short a=0x01;//0x..为16进制数,0x01写成short类型是00000000 00000001
char *c=&a;//这里面访问变量里的地址时,遵循char的访问规则,如果是大端,则*c=0
if((*c)==0){
printf("big\n");
}else{
printf("small\n");
}
return 0;
}
???是不是很懵?我相信有点基础的人肯定知道这个
#include <stdio.h>
typedef union Un{
char c;
short i;
}un;
int main()
{
un n;
n.i=1;
if (1 == n.c){
printf("small\n");
}
else{
printf("big\n");
}
return 0;
}
这段代码应该不用解释了,网上一大堆。那么,我来解释一下上面的代码。
如注释所说,变量a在地址空间中是这么存的:
00000000 00000001
而指针类型的变量p中存的地址是a的地址,但用char的访问规则读取时,只读取
00000000
或
00000001
的一个。如果读取的是00000000,说明高字节保存在地址空间的低地址中,反之说明低字节保存在地址空间的低地址中。由此,就可以判断出大小端了,是不是很简单?
还有什么方法?分享出来吧!