【C语言】[其他]:函数判断大端模式还是小端模式
2015-04-01 19:28
453 查看
利用大小端·模式数据存放的顺序不同以及联合体的特殊内存分配来实现。判断函数如下:
大端模式:内存的低地址存放数据的高字节
小端模式:内存的低地址存放数据的低字节
以上面的函数为例:
x = 0x11223344;
1)假设x的首地址是0xFFFF FFF1,也就是存放x的内存的起始地址;那么存放四个数据,地址由低到高分别为:
0xFFFF FFF1、 0xFFFF FFF2、 0xFFFF FFF3、 0xFFFF FFF4;
第一个就是最低的内存地址了:0xFFFF FFF1;
3)假设在大端模式下:低地址存放高字节
最低内存地址:0xFFFF FFF1
最高数据字节:0x11
具体存储如下:
0xFFFF FFF1:0x11
0xFFFF FFF2:0x22
0xFFFF FFF3:0x33
0xFFFF FFF4:0x44
4)假设在小端模式下:低地址存放低字节
最低内存地址:0xFFFF FFF1
最低数据字节:0x44
具体存储如下:
0xFFFF FFF1:0x44
0xFFFF FFF2:0x33
0xFFFF FFF3:0x22
0xFFFF FFF4:0x11
5)再根据联合体数据类型的特点:联合体里的成员内存是共享的或者说是覆盖的,并且数据内存存储的长度就是存储最长的内部成员的长度。以上函数中的u.x0是char类型的,只占一个字节,并且u.x0的内容是联合体u的最低内存地址的里的内容。根据大小端模式的不同而不同,从而可以判断大小端模式。
P.S:一般X86的是小端模式
2015.4.2 00:23
pillarpeng
void JudgeEndianness(void) { union { int x; char x0; }u={.x=0x11223344}; //初始化联合体中的成员整形数据x if(u.x0 == 0x11) printf("小端模式");//低地址存放低字节 if(u.x0 == 0x44) printf("大端模式");//低地址存放高字节 }
大端模式:内存的低地址存放数据的高字节
小端模式:内存的低地址存放数据的低字节
以上面的函数为例:
x = 0x11223344;
1)假设x的首地址是0xFFFF FFF1,也就是存放x的内存的起始地址;那么存放四个数据,地址由低到高分别为:
0xFFFF FFF1、 0xFFFF FFF2、 0xFFFF FFF3、 0xFFFF FFF4;
第一个就是最低的内存地址了:0xFFFF FFF1;
3)假设在大端模式下:低地址存放高字节
最低内存地址:0xFFFF FFF1
最高数据字节:0x11
具体存储如下:
0xFFFF FFF1:0x11
0xFFFF FFF2:0x22
0xFFFF FFF3:0x33
0xFFFF FFF4:0x44
4)假设在小端模式下:低地址存放低字节
最低内存地址:0xFFFF FFF1
最低数据字节:0x44
具体存储如下:
0xFFFF FFF1:0x44
0xFFFF FFF2:0x33
0xFFFF FFF3:0x22
0xFFFF FFF4:0x11
5)再根据联合体数据类型的特点:联合体里的成员内存是共享的或者说是覆盖的,并且数据内存存储的长度就是存储最长的内部成员的长度。以上函数中的u.x0是char类型的,只占一个字节,并且u.x0的内容是联合体u的最低内存地址的里的内容。根据大小端模式的不同而不同,从而可以判断大小端模式。
P.S:一般X86的是小端模式
2015.4.2 00:23
pillarpeng
相关文章推荐
- C语言判断数据存储时大端模式还是小端模式
- C语言判断数据存储时大端模式还是小端模式
- 用c语言判断计算机是大端模式还是小端模式
- (实训第二天)用C程序判断机器是大端模式还是小端模式,附源程序
- 怎样判断是小端存储模式还是大端存储模式
- 【编程1】写一个函数判断系统是大端还是小端
- 【C语言深度剖析】测试系统存储是大端模式还是小端模式的方法
- 如何判断CPU是大端还是小端模式
- 判断CPU是大端模式还是小端模式
- C语言判断cpu是大端还是小端。
- cpu判断大端还是小端模式
- 如何判断CPU是大端还是小端模式
- 如何判断CPU是大端还是小端模式
- 写一个程序判断当前系统存储模式是大端还是小端
- 如何判断CPU是大端模式还是小端模式
- 如何判断CPU是大端还是小端模式
- 什么是大小端模式,写个程序判断本机是大端还是小端模式
- 判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
- 一个函数判断你的计算机是小端存储还是大端存储
- 用C语言,如何判断主机是 大端还是小端(字节序)