Little-Endian or Bigger-Endian?
2016-04-17 16:37
211 查看
大小端是针对谁说的?
答:CPU,采用小段模式的CPU操作数据时将操作数的低字节放到内存的低地址,采用大端模式的CPU会将操作数的低字节放到内存的高地址。
先看几个常识:
1)字符'A',十进制为65,十六进制为0x41,八进制为0101
2)系统对一个数据寻址时,总是从低字节的地址开始。
3)系统对一个对象的存储是将对象中的一个字节一个字节依次存储的。
3)int n; 整形变量占有4个字节,因为sizeof(int)=4
4)上面的n的从低地址的字节内容到高地址的字节内容,每个内容可以通过以下取值方式依次获取得到:
((char*)&n)[0],((char*)&n)[1],((char*)&n)[2],((char*)&n)[3]
5)假如int n = 0x41424344;,则n对象的低字节内容到高字节内容依次为:
0x44,0x43,0x42,0x41
知道了上述常识,判断大小端就很容易了:
bool little_endian()
{
int n = 0x41424344;
return ((char*)&n)[0] == 0x44 ? true : false;
}
bool bigger_endian()
{
int n = 0x41424344;
return ((char*)&n)[0] == 0x41 ? true : false;
}
也有使用union来判断大小端的,这是利用了union内每个变量的首地址是相同的特性。
bool little_endian()
{
union MyUnion{
int n;
char ch;
};
MyUnion u;
u.n = 0x41424344;
return u.ch == 0x44 ? true : false;
//< 利用了 assert( &(u.ch) == &(((char*)&u.n)[0]));特性,等效于return ((char*)&u.n)[0] == 0x44 ? true : false;
}
(END)
答:CPU,采用小段模式的CPU操作数据时将操作数的低字节放到内存的低地址,采用大端模式的CPU会将操作数的低字节放到内存的高地址。
先看几个常识:
1)字符'A',十进制为65,十六进制为0x41,八进制为0101
2)系统对一个数据寻址时,总是从低字节的地址开始。
3)系统对一个对象的存储是将对象中的一个字节一个字节依次存储的。
3)int n; 整形变量占有4个字节,因为sizeof(int)=4
4)上面的n的从低地址的字节内容到高地址的字节内容,每个内容可以通过以下取值方式依次获取得到:
((char*)&n)[0],((char*)&n)[1],((char*)&n)[2],((char*)&n)[3]
5)假如int n = 0x41424344;,则n对象的低字节内容到高字节内容依次为:
0x44,0x43,0x42,0x41
知道了上述常识,判断大小端就很容易了:
bool little_endian()
{
int n = 0x41424344;
return ((char*)&n)[0] == 0x44 ? true : false;
}
bool bigger_endian()
{
int n = 0x41424344;
return ((char*)&n)[0] == 0x41 ? true : false;
}
也有使用union来判断大小端的,这是利用了union内每个变量的首地址是相同的特性。
bool little_endian()
{
union MyUnion{
int n;
char ch;
};
MyUnion u;
u.n = 0x41424344;
return u.ch == 0x44 ? true : false;
//< 利用了 assert( &(u.ch) == &(((char*)&u.n)[0]));特性,等效于return ((char*)&u.n)[0] == 0x44 ? true : false;
}
(END)
相关文章推荐
- Python 集合(set)类型的操作
- Learning Scrapy笔记(六)- Scrapy处理JSON API和AJAX页面
- PHP实现当前文件夹下所有文件和文件夹的遍历
- [HDOJ1171]Big Event in HDU(01背包)
- zoj 3903 Ant【推公式+逆元】
- javascript中textContent与innerText的异同分析
- 自定义多状态高仿应用下载百分数view
- web基础
- Android音频开发(6):使用 OpenSL ES API(上)
- 第五种项目四-长方柱类
- 水电费
- new、delete、malloc、free
- microsoft project 添加空行 空白行 空白任务
- Activity生命周期
- spring基础知识详解
- Windows Eclipse 调试 HBase
- POJ 3069Saruman's Army
- Android之Wifi开发
- MySql中外键约束
- 对“视觉机器学习20讲配套仿真代码”的研究心得---KNN学习