立即注册
登录
电子工程网
新闻
新品
文章
下载
视频
工具
论坛
研讨会
空间
damafeng11的个人空间
https://www.eechina.com/space-uid-4205.html
[收藏]
[复制]
[RSS]
空间首页
博客
主题
留言板
个人资料
论坛
BBS
我的空间
好友
帖子
收藏
道具
勋章
任务
博客
Big-endian AND Little-endian
已有 1295 次阅读
2009-10-28 15:14
Endianism,端序,是指用来存储数据的方法,它定义了数据类型对字节进行寻址的方式。
两种端序方式:
1、Little-endian,小端序,是将低位字节存储在内存偏移地址较低的地址中,将高位字节存储在内存偏移地址较高的地址中;
2、Big-endian,大端序,则是将低位字节存储在内存偏移地址较高的地址中,将高位字节存储在内存偏移地址较低的地址中。
比如:
0x12345678 在 big-endian 系统上的布局
内存偏移量 0 1 2 3
内存内容 0x12 0x34 0x56 0x78
0x12345678 在 little-endian 系统上的布局
内存偏移量 0 1 2 3
内存内容 0x78 0x56 0x34 0x12
机器大小端和环境相关,可以使用下面的办法判断机器的大小端:
#include <cstdlib>
#include <iostream>
using namespace std;
union test
{
int i;
char c;
};
int main()
{
union test t;
t.i = 0x12345678;
if(t.c == 0x78)
cout<<"Little-endism"<<endl;
else
cout<<"Big-endism"<<endl;
system("pause");
return 0;
}
复制代码
在获悉环境的大小端后,就可以进行细致的分析了,
比如 Little-endlism 环境下:
#include <cstdlib>
#include <iostream>
using namespace std;
union test
{
int i;
char c;
};
int main()
{
union test t;
t.i = 0x12345678;
short int x= *((short int *)(&(t.c)));
cout<<hex<<x;
system("pause");
return 0;
}
复制代码
0x12345678 在 little-endian 系统上的布局
内存偏移量 0 1 2 3
内存内容 0x78 0x56 0x34 0x12
short int 为2字节(32位平台下)
将访问:
内存偏移量 0 1
内存内容 0x78 0x56
所以, 最后的结果为 (0x)5678
Endianism 在以下情况中非常重要:
1.使用位掩码时
2.对象的间接
指针
地址部分
合理使用联合体、位域等手段,可以在一定程度避免端序问题。
路过
鸡蛋
鲜花
握手
雷人
收藏
邀请
举报
全部
作者的其他最新博客
•
什么叫复盘 如何复盘
•
一点小常识之六
•
隐藏在K线背后的多空力量
•
一点小常识之五
•
一点小常识之四
•
一点小常识之三
评论 (
0
个评论)
您需要登录后才可以评论
登录
|
立即注册
评论
damafeng11
加为好友
给我留言
打个招呼
发送消息
关于我们
-
服务条款
-
使用指南
-
站点地图
-
友情链接
-
联系我们
电子工程网
© 版权所有
京ICP备16069177号
| 京公网安备11010502021702
返回顶部