用c语言写个函数测试处理器是大端还是小端程序怎么写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言写个函数测试处理器是大端还是小端程序怎么写?相关的知识,希望对你有一定的参考价值。
写一个函数判断系统是大端还是小端。若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1.大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中
小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节
联合体union的存放顺序是所有成员都从低地址开始存放。
Int checkCPU ()
Union w
Int a;
Char b;
c;
c.a=1;
return (c.b==1);
UNIX 网络编程 第一卷 78页 (英文版) 给出了这样一段代码:
PS: 下面代码中的unp.h是Stevens 老大自己定义的一个头文件,具体的代码在这本书的附录里有给出来.
代码
1
2 #include "unp.h"
3
4 int main(int argc ,char ** argv)
5
6
7 union
8 short s;
9 char c[sizeof(short)];
10 un;
11 un.s = 0x0102;
12 printf("%s\n",CPU_VENDOR_OS);
13
14 if(sizeof(short) == 2)
15
16 if(un.c[0] == 1 && un.c[1] ==2 )
17 printf("big-endian\n");
18 else if (un.c[0] == 2 && un.c[1] == 1)
19 printf("little-endian\n");
20 else printf("unknow");
21 else
22 printf ( "sizeof(short) = %d\n",sizeof(short));
23 exit(0);
24
25 参考技术A 思路:做一个char和int的共用体 参考技术B union union_type
unsigned char a;
int b;
;
int main(int argc, char **argv)
union_type c;
c.b = 1;
if(c.a == 1) printf("little endian\n");
else printf("big endian\n");
return 0;
本回答被提问者采纳 参考技术C LS正解。
大端小端
大端小端针对的多字节数据的存储类型的。不包括字符串,字符串是怎么写的就在内存中怎么存的。单个字节的内部位序也没有大端小端说法,怎么写的在内存中就是怎么存的。
多字节存储问题
现在有一个变量int a = 0x45862378;
共有四个字节的数据 0x45 0x86 0x62 0x78 其中0x45叫做高字节0x78叫低字节,分不清高字节还是低字节? 就像十进制一样,越往左边权重越高嘛。是按照0x78存放在内存低地址。。。0x45存放在内存高地址,还是0x78存放在内存高地址。。。
0x45存放在低地址呢? 这两种方法都可以,把低字节存放在低地址的这叫小端,以低字节开始所以叫小端,把高字节放在低地址的叫大端,以高字节开始所以叫大端。
0x45862378这个数按照小端存储就是
0x78 0x23 0x86 0x45
内存低地址-----------------------内存高地址
0x45862378这个数按照大端存储就是
0x45 0x86 0x23 0x78
内存低地址-----------------------内存高地址
大小端各有各的好处吧,大端存储你能方便的得到数据的高字节,比如一个整数的符号位。小端能方便的得到数据的低字节数据,有啥用 我暂时还没想到。
vs2017 用的是小端存储。
以上是关于用c语言写个函数测试处理器是大端还是小端程序怎么写?的主要内容,如果未能解决你的问题,请参考以下文章