字节流数据处理之:大端模式和小端模式

129 阅读1分钟

100857086_p0.jpg

工作原因需要对接协议,将二进制命令数据转换成对象来处理,此篇文章简要介绍一下对于二进制数据处理中的两种字节高低位处理方法

大端模式

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

小端模式

是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

Eg:

下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf来表示value:

大端模式

低地址


buf[0] (0x12) -- 高位字节

buf[1] (0x34)

buf[2] (0x56)

buf[3] (0x78) -- 低位字节

小端模式

低地址


buf[0] (0x78) -- 低位字节

buf[1] (0x56)

buf[2] (0x34)

buf[3] (0x12) -- 高位字节

各平台情况:

我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以随时在程序中(在ARM Cortex 系列使用REV、REV16、REVSH指令 )进行大小端的切换。