# 前言
本篇浅了解一下大端序和小端序
# 字节序
字节序是多字节数据在计算机内存中存储或网络传输时各个数据的存储顺序,主要分为两类,大端序和小端序
例:
BYTE b = 0x12; | |
WORD w = 0x1234; | |
DWORD dw = 0x12345678; | |
char str[] = "abcde"; |
上面的例子中一共有四种数据类型,他们大小不同,下表中是同一个数据在不同的字节序保存时的不同
TYPE | Name | SIZE | 大端序类型 | 小端序类型 |
---|---|---|---|---|
BYTE | b | 1 | [12] | [12] |
WORD | w | 2 | [12][34] | [34][12] |
DWORD | dw | 4 | [12][34][56][78] | [78][56][34][12] |
char[] | str | 6 | [61][62][63][64][65][00] | [61][62][63][64][65][00] |
查看ASCLL表,a的ASCLL码的16进制为0x61,这里注意字符串最后是以null结尾
当数据类型为 BYTE 的时候,因为长度为 1 个字节,两种字序的字节顺序是一样的,当数据长度为 2 个字节以上的时,大端序采用内存地址地位存数据高位,地址高位存储数据低位,采用一种直观的字节存储循序,而小端序则刚好相反
这里第四种情况种,字符串 abcde 被存放在一个字符数组中,因为字符数组在内存中是连续的,故存取顺序与字节序无关
# 在 OD 中查看小端序
#include "windows.h" | |
BYTE b = 0x12; | |
WORD w = 0x1234; | |
DWORD dw = 0x12345678; | |
char str[] = "abcde"; | |
int main(int argc,char *argv[]){ | |
byte lb = b; | |
WORD lw = w; | |
DWORD ldw = dw; | |
char *lstr = str; | |
return 0; | |
} |