判断大小端模式
来源:互联网 发布:c语言可以编安卓软件吗 编辑:程序博客网 时间:2024/05/22 11:44
什么是大小端模式
- 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
- 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。
比如说16bit的数0x1234大小端的存放方式如下表:
常见的CPU架构一般都是采用小端模式,比如说PC机的X86,还有ARM,DSP。
程序判断大小端模式
常见的有两种,一种是定义一个短整型变量,占2个字节,然后通过强制转换将低地址的数据放到一个char类型的变量,通过判断该变量的值来判断大小端模式,程序如下:
#include <stdio.h>#include <stdlib.h>int main(int argc, char const *argv[]){ short int a = 0x1234; char b = *(char *)&a; if( b == 0x12) printf(" Big Endian\n"); else if (b == 0x34) printf("Little Endian\n"); return 0;}
第二种方法是利用C语言联合体的性质来判断。在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。因为union 型数据所占的空间等于其最大的成员所占的空间。所以下面的union联合体大小是等于8个字节
union data{ short int a; char b; double c;}data;printf("%d\n",sizeof(data) );
所以不论对哪个变量的存取或访问都是从union 的首地址位置开始,利用这个特性也可以判断大小端模式。
#include <stdio.h>#include <stdlib.h>int main(int argc, char const *argv[]){ union data { short int a; char b; double c; }data; printf("%d\n",sizeof(data) ); data.a = 0x1234; if (data.b == 0x12) { printf("Big Endian\n"); } else if (data.b == 0x34) { printf("Little Endian\n"); } return 0;}
0 0
- 大小端模式判断
- 大小端模式判断
- 判断大小端模式
- 判断大小端模式
- 判断系统大小端模式
- 判断CPU大小端模式
- 大小端模式 判断方法
- 大小端模式及其判断
- 判断CPU大小端模式
- 判断机器大小端模式
- 判断系统的大小端模式
- 判断机器的大小端模式
- C语言判断大小端模式
- C语言判断大小端模式
- 大小端模式介绍及其判断
- C 语言大小端模式判断
- 大小端模式的快速判断
- 大小端模式的快速判断
- Python的静态方法和类成员方法
- Eclipse使用记录
- 参加2015年扬州马拉松是何种体验?
- Unknown mysql sever host 'localhost'错误
- hdu 1596 find the safest road(dijkstra||floyd)
- 判断大小端模式
- C++引用
- POJ2796---Feel Good(前缀和+单调栈维护)
- HDU-5211-Mutiple(BestCoder+以后做题还是用c++吧.......)
- TF-IDF模型的概率解释
- Android Bitmap内存限制问题
- Performance 之我的起步[一]
- POj1915
- JUnit测试案例