判断机器大小端的方法总结
2015-05-18 11:32
211 查看
typedef unsigned char BOOL;
#define BOOL_TRUE 1
#define BOOL_FALSE 0
判断机器大小端面,小端返回BOOL_TRUE,大端返回BOOL_FALSE;
首先,先说明下大小端的定义:
小端:内存的低地址存储的是数据的低位,高地址存储的是数据的高位。
大端:内存的高地址存储的是数据的
例:大小端对一个int类型数据的存储,以0x12345678为例
1.利用联合体特性判断(联合体union的存放顺序是所有成员都从低地址开始存放)
2.利用指针判断
3.利用系统函数htons()判断
常见的情况为以上三种,个人感觉还可以有一种
4.利用位域判断
以此题为例:当机器为小端时,stEndian.sUseful的值是0x01,当机器为大端时,stEndian.sUseful的值是0x00
#define BOOL_TRUE 1
#define BOOL_FALSE 0
判断机器大小端面,小端返回BOOL_TRUE,大端返回BOOL_FALSE;
首先,先说明下大小端的定义:
小端:内存的低地址存储的是数据的低位,高地址存储的是数据的高位。
大端:内存的高地址存储的是数据的
例:大小端对一个int类型数据的存储,以0x12345678为例
内存地址 | 0x0103 | 0x0102 | 0x0101 | 0x0100 |
小端 | 12 | 34 | 56 | 78 |
大端 | 78 | 56 | 34 | 12 |
BOOL IsLittleEndian() { ENDIAN_U stEndian; stEndian.sShort = 0x0001; if(stEndian.cChar == 0x01) { return BOOL_TRUE; } return BOOL_FALSE; }
2.利用指针判断
BOOL IsLittleEndian() { short sShort = 0x1234; char *pcChar = (char *)&sShort; if(*pcChar == 0x34) { return BOOL_TRUE; } return BOOL_FALSE; }
3.利用系统函数htons()判断
BOOL IsLittleEndian() { if(0x01 != htons(0x01)) { return BOOL_TRUE; } return BOOL_FALSE; }
常见的情况为以上三种,个人感觉还可以有一种
4.利用位域判断
<pre name="code" class="cpp">typedef struct Endian_Bit_tag { char sReserve:4; char sReserve2:4; }ENDIAN_BIT_S; BOOL IsLittleEndian_Bit() { ENDIAN_BIT_S stEndian; *(char *)(&stEndian) = 0x01; if(stEndian.sReserve== 0x1) { return BOOL_TRUE; } return BOOL_FALSE; }
以此题为例:当机器为小端时,stEndian.sUseful的值是0x01,当机器为大端时,stEndian.sUseful的值是0x00
相关文章推荐
- 两种方法实现判断当前机器是大端还是小端
- 实现判断机器大小端的两种方法
- 内网渗透技巧:判断机器真实外网IP的5种方法总结
- 判断机器大小端的两种实现方法
- 判断机器大小端的两种实现方法
- 判断机器大小端的两种实现方法
- 判断机器大小端的两种实现方法
- 内网渗透技巧:判断机器真实外网IP的5种方法总结
- 共用体和指针判断机器大小端
- JS判断浏览器类型的方法总结(IE firefox chrome opera safari)
- Android判断屏幕锁屏的方法总结
- js判断输入字符串是否为空、空格、null的方法总结
- 判断为空的方法总结
- 判断字符串中是否包含特定字符的方法总结
- IOS判断字符串是不是纯数字的方法总结
- java判断字符串是否为空的方法总结
- ios开发之小总结「类与对象的判断方法和遍历字典的方法」
- C语言中判断大小端的方法
- 判断机器的大小端 && 和位数
- JavaScript中判断整数的多种方法总结