大小端判断
来源:互联网 发布:男生手提包 知乎推荐 编辑:程序博客网 时间:2024/05/17 23:10
引言
考虑一个32位整数,它由4个字节组成。内存中存储这个4个字节由两种方法:大端字节序,小端字节序;
概念
小端字节序:将低序字节存储在起始地址,称为小端字节序;
大端字节序:将高序字节存储在起始地址,称为大端字节序;
图示
如果定义一个int类型的整数,将0x12345678赋值给这个整数,这个整型变量采用大端模式或小端模式在内存中的存储如下图所示:
地址偏移量大端模式小端模式0x000000010x120x780x000000020x340x560x000000030x560x340x000000040x780x12如上表所示,采用大小端模式对数据进行存放主要区别在于存放的字节顺序:大端模式将高序字节存放在低地址,小端模式将高序字节存放在高地址;
代码区分
1. 直接判断法
union:所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。
我们可以利用union的特性来判断大小端;思路如下:往a成员赋值,然后读取b就相当于读取a成员的低位第一个字节的值。如果机器使用大端模式,则u.a=1那a的最高字节值为1;如果机器使用小段模式,则u.a=1则a的最低位字节为1。上述可知b和a有相同的起始位,所以读取b如果等于1,则为小端模式,b为0则为大端模式;
typedef union { short i; char c; }testUnion; int checkSystemUnion(void) { testUnion objTestUnion; objTestUnion.i = 1; return (objTestUnion.i == objTestUnion.c); }
2. 联合区分发
我们初始化了一个int变量i为0x12345678,,该变量地址为0x00000001;根据大小端定义可知:在小端模式下,0x00000001一个字节内的值为0x78,类推0x00000002=0x56,0x00000003=0x34,0x00000004=0x12,根据这个编程如下:
int checkSystem(void) { int i = 0x12345678; char *c = &i; return ((c[0] == 0x78) && (c[1] == 0x56) && (c[2] == 0x34) && (c[3] == 0x12)); }
0 0
- 快速判断大小端
- 判断大小端
- 判断大小端
- 大小端模式判断
- 判断大小端
- 判断系统大小端
- 判断大小端
- 大小端的判断
- 判断大小端
- 判断系统大小端
- 大小端模式判断
- 大小端判断问题
- 判断大小端
- 快速判断大小端
- 判断大小端
- 大小字节端判断
- 大小端系统判断
- 判断大小端
- 【abap】SE24维护类、接口interface(如何看懂CO03事务码对应的abap代码)
- 抢答器
- 十六进制转八进制
- endl与/n
- Java中的赋值
- 大小端判断
- Android的多媒体信息获取
- 深入理解立即数与直接寻址
- 链表插入排序
- 错误票据
- LeetCode538. Convert BST to Greater Tree
- hdu N皇后问题 (简单DFS)
- Java基础积累(一)
- linux部署war包到tomcat下