little-endian与big-endian
来源:互联网 发布:ocr身份证识别软件 编辑:程序博客网 时间:2024/05/17 02:35
在mdadm源码中,会发现有很多的__cpu_to_le16,le16_to_cpu等很多类似的函数,而在看1.0版本的superblock结构中,他一开始的注释就写了
/*
* The version-1 superblock :* All numeric fields are little-endian.*/
因为到时候会涉及一些超级块位的操作,所以还是很有必要了解下little-endian与big-endian的。
Byte Endian是指字节在内存中的组织,所以也称为Byte Order。
对于数据中跨越多个字节的对象, 就有这样的问题,他的地址是多少?他的字节在内存中如何组织?
而一般对于跨越多个字节的对象,他所占的字节是连续的,他的地址等于他所占有字节的最低地址。
比如: int x(假定int为4个字节), 它的地址为0x110。 那么它占据了内存中的Ox110, 0x111, 0x112, 0x113。这只是内存字节组织的一种情况。
多字节对象在内存中的组织有一般有两种约定。 考虑一个W位的整数。
它的各位表达如下:[Xw-1, Xw-2, ... , X1, X0],它的
MSB (Most Significant Byte, 最高有效字节)为 [Xw-1, Xw-2, ... Xw-8];
LSB (Least Significant Byte, 最低有效字节)为 [X7,X6,..., X0]。
其余的字节位于MSB, LSB之间。
LSB和MSB谁位于内存的最低地址, 即谁代表该对象的地址?
这就引出了little-endian与big-endian,也就是小端及大端表示。
如果LSB在MSB前面, 既LSB是低地址, 则该机器是小端; 反之则是大端。不同公司一般偏好不同,例如DEC及Intel机器一般采用小端,而IBM,SUN机器一般采用大端。但也有的CPU能够工作于大端也能工作于小端、
Linux系统中,可以在/usr/include/中(包括子目录)查找字符串BYTE_ORDER(或
_BYTE_ORDER, __BYTE_ORDER),确定其值。BYTE_ORDER中文称为字节序。这个值一般在endian.h或machine/endian.h文件中可以找到,有时在feature.h中,不同的操作系统可能有所不同。
对于一个数0x1122
使用Little Endian方式时,低地址存储0x22, 高地址存储0x11
而使用Big Endian方式时,低地址存储0x11, 高地址存储0x22
对于MSB, LSB的理解,当年有个老师是这么说的,就像钱,19999元,当然是最高位的1是最重要的,最多啊,Most Significant Byte,而低位的数字当然是Least Significant Byte。权当作为对MSB,LSB的助记符吧- -
一般常见的数据存储,用文字写出来的时候,其内容书写格式,多数是从低地址到高地址.
举例,一个16进制数是 0x11 22 33, 而存放的位置是
地址0x3000 中存放11
地址0x3001 中存放22
地址0x3002 中存放33
连起来就写成地址0x3000-0x3002中存放了数据0x112233.
而这种存放和表示方式,正好符合大端.
- Big Endian 与 Little Endian
- big endian与little endian
- Big-endian 与 Little-endian
- Big Endian 与 Little Endian
- Big endian 与 Little endian
- Big endian 与 Little endian
- little-endian与big-endian
- Little endian & Big endian
- big-Endian&little-Endian
- big-Endian&little-Endian
- big-Endian&little-Endian
- little endian && big-endian
- Big endian & Little endian
- big-endian/little-endian
- Big endian Little endian
- Big-endian & Little-endian
- Little-endian & Big-endian
- big endian & little endian
- 入门篇:yum安装Linux+Apache+PHP+MySQL服务器环境(CentOS篇)
- Libjingle综述
- Ext调用规则返回json数据到页面
- 单片机的几种寻址方式
- linux下逐级创建目录
- little-endian与big-endian
- makefile
- Oracle存储过程记录
- 张孝祥整理的JAVA面试题目(六)(每天一更)
- 中星微ZC301P摄像头驱动支持
- 继续理解socekt具体使用--2
- Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
- 分享一些牛人的心得
- android webview 使用以及一些常见的异常处理