Endianness(字节序)
Problem(解决什么问题)
一个多字节对象由多个字节组成。
例如:
0x01234567可以拆成 4 个字节:
0x01 0x23 0x45 0x67问题是:
当这个多字节对象放入内存时,这些字节应该按照什么顺序排列?
字节序讨论的就是这个问题。
Basic Idea(核心思想)
字节序讨论的是:
一个多字节对象在内存中,按地址从低到高,字节如何排列。注意:
内存中应该说低地址到高地址不要说:
内存低位到高位因为“高位”和“低位”通常描述的是数值内部的位权;而内存中讨论的是地址高低。
Big Endian(大端法)
大端法:
低地址存放最高有效字节对于:
0x01234567从低地址到高地址,内存排列为:
低地址 -> 高地址
0x01 0x23 0x45 0x67也就是先放最高有效字节 0x01。
Little Endian(小端法)
小端法:
低地址存放最低有效字节对于:
0x01234567从低地址到高地址,内存排列为:
低地址 -> 高地址
0x67 0x45 0x23 0x01也就是先放最低有效字节 0x67。
What Changes(改变的是什么)
不管使用大端法还是小端法,数值本身没有变:
0x01234567它的最高有效字节始终是:
0x01它的最低有效字节始终是:
0x67改变的只是:
这些字节在内存地址中的排列顺序Summary(总结)
大端法:低地址存放最高有效字节。
小端法:低地址存放最低有效字节。字节序的核心不是改变数值本身,而是决定多字节对象在内存中从低地址到高地址的字节排列方式。