小端模式&大端模式
来源:互联网 发布:linux解压缩命令 tar 编辑:程序博客网 时间:2024/06/10 00:04
小端模式的英文是Little-Endian,大端模式的英文是Big-Endian。
这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
在计算机世界中借用这个词自然不是描述鸡蛋的大小头,而是指多字节数据类型中的字节顺序。
小端模式(Little-Endian)
数据类型中的高位数据存放于高地址部分,底位数据存放于底地址部分。简而言之:高位在后,低位在前。
大端模式(Big-Endian)
数据类型中的高位数据存放于底地址部分,底位数据存放于高地址部分。简而言之:高位在前,低位在后。
感性理解一下
定义4字节宽度的变量:
U32 g_data = 0x12345678;
g_data这个数据,在不同系统中存储的字节顺序是不同的,列表如小:
小端模式(Little-Endian) 大端模式(Big-Endian)
第0字节 78h 12h
第1字节 45h 34h
第2字节 34h 56h
第3字节 12h 78h
用代码进行检测
BOOL IsLittleEndian( void )
{
U16 i = 0x1234;
U8* p = (U8*)&i;
if( p[0] == 0x34 && p[1] == 0x12 )return 1;//系统是Little-Endian
//if( p[0] == 0x12 && p[1] == 0x34 )return 0;//系统是Big-Endian
return 0;
}
小端模式和大端模式的优缺点
不同的CPU选择了不同的模式,比如X86使用小端模式而PowerPC使用大端模式。
具体应用
比如某协议规定了数据按大端模式(Big-Endian)组织,而实现协议的系统是小端模式(Little-Endian), 那么协议的实现代码就需要对输入数据从(Big-Endian)转换为(Little-Endian),再进行运算, 输出数据也要从(Little-Endian)转换为(Big-Endian)。
下面的宏定义完成为这种转换:
#define BV16(i) ( (U16)( (((U16)i)>>8) | (((U16)i)<<8) ) )
#define BV32(i) ( (((U32)i)>>24) /
| ((((U32)i)&0x00ff0000)>>8) /
| ((((U32)i)&0x0000ff00)<<8) /
| (((U32)i)<<24) )
- 大端、小端模式
- 大端小端模式
- 大端小端模式
- 大端小端模式
- 大端小端模式
- 大端小端模式
- 大端小端模式
- 大端、小端 模式
- 小端大端模式
- 大端小端模式
- 大端-小端模式
- 大端小端模式
- 大端 小端模式
- 大端/小端模式
- 小端模式 大端模式
- 大端模式 小端模式
- 大端模式小端模式
- 小端模式&大端模式
- Delphi与消息1:TObject中的Dispatch和DefaultHandler
- SQL注入教程之高级篇|Findnet.com.cn
- 恳请管理员不要删除本人的转载文章!
- wap wtai
- 周五,晴
- 小端模式&大端模式
- Java Server Pages表达式语言
- 【转】Java double 相加的怪事情
- 那天就这样
- introduction of VIM orders
- (转载)SQL Server 2005 企业版没有 Management Studio管理工具的解决方法
- ajaxpro2.0 和服务端交互 传递参数 的实现
- W
- 简单叙述钩子实现