大小端序

作者: mconintet | 来源:发表于2016-07-01 11:27 被阅读199次

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

比如现在有一块四个字节的内存,并且地址是从左往右递增的。为了方便,都置为 0

1000:1000 00 00 00 00

现有一个十六进制数 0x12345678,这个十六进制数刚好可以使用上面的那块内存去存放,因为它们都是32bits。

大端序

如果是大端序,内存表现将会是这样

1000:1000 12 34 56 78

可以发现,12 是原十六进制数 0x12345678的高位,而这个 12 放在上面那块内存地址的最低单元中(因为前面说了,这块内存地址是从左往右递增的,所以左边是相对低位,右边是相对高位)。这就是这段话的意思

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中

小端序

如果是小端序,内存表现是这样的

1000:1000 78 56 34 12

可以发现,78 是原十六进制数 0x12345678的低位,而此时它也放在了最低的内存单元中,这就是这段话的意思

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

另外,可以发现,大小端序对字节内容是没有影响的,12还是 12 并没有变成 21

还有一点就是,一般情况下,对于下面这段内存内容

0AEC:0000  CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 50 05 8A 03
0AEC:0010  50 05 17 03 50 05 16 04-01 01 01 00 02 FF FF FF
0AEC:0020  FF FF FF FF FF FF FF FF-FF FF FF FF 06 05 4E 01
0AEC:0030  10 0A 14 00 18 00 EC 0A-FF FF FF FF 00 00 00 00
0AEC:0040  05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0AEC:0050  CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20
0AEC:0060  20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20
0AEC:0070  20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00

默认的就是,地址从左往右递增,从上往下增加。也就是通常都会去这样表示并这样阅读。

8086 端序

如何知道当前的 8086 是大端序还是小端序,可以使用下面的汇编代码测试

; 设置 data segment 的段地址
mov ax, 1000
mov ds, ax

; 一次将一个字的数据 0001h 写入数据段的第一个单元开始的一个字的内存中
; 一个字占用 2 个字节,那么如果是大端序,内存中应该是 00 01
; 如果是小端序,内存中就会使 01 00
mov ax, 1h
mov [0], ax

; 先将 bx 置 0,便于下面的查看
sub bx, bx

; 将数据段中的第一个内存单元的内容放置到 bl 中,因为 bl 是 8 位的,所以这样可以
; 达到只获取第一个字节的目的,现在可以查看寄存器 bx 的值,如果它是 0001,则说明
; 内存中的数据是 01 00 这样的格式,则设备是小端序的,反之亦然
mov bl, [0]

相关文章

  • 大小端序

    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数...

  • C的小工具库--JohnLib

    1. 有关大小端序,及二进制转换的工具集: 运行结果:

  • 大小端

    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数...

  • 大小端

    我还是弄不清,记不住到底哪个大,哪个小,所以我暂时先不管了 bool IsLittleEndian() { i...

  • 大小端

    大小端是指大于一个字节的变量在内存中的存储顺序,在内存中,通常来说,是以字节为单位存储数据的,以c++为例,一个c...

  • IT(大小端)

    计算机内存由低地址向高地址分配 小端(低尾端):低序字节放在低地址:数:1234 -> 内存:4321 大端(高尾...

  • 大小端

    Java与平台无关默认是大端,网络上传输数据普遍采用大端C语言默认是小端数据在计算机中存储的大小端两种,以十进制数...

  • 大小端

    小端 特征:数据的低字节保存在内存低地址,高字节保存在内存高地址。注意:数据类型 char 和 unsigned ...

  • 大小端

    void test() { char a,b,c,d; int x=0x30313233; cout << *((...

  • 大小端

    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式,是指数据的高字节保存...

网友评论

    本文标题:大小端序

    本文链接:https://www.haomeiwen.com/subject/mxbfjttx.html