- 字节序是多字节数据在计算机内存中存储或网络传输时个字节的存储顺序,主要分为两大类,一类时小端序,另一类是大端序。
- 一个示例:
BYTE b = 0x12;
WORD w = 0x1234;
DWORD dw = 0x12345678;
char str[] = "abcde";
- 同一个数据的不同字节序保存时有何不同:
- 数据类型为字节型,其长度为一个字节,保存这样的数据时,无论采用大端序还是小端序,字节顺序都是一样的。
- 采用大端序存储数据时,内存地址低位存储数据高位,内存地址高位存储数据低位。采用小端字序存储数据时,地址高位存储数据的高位,地址低位存储数据的低位。
- 字符串“abdcde”被保存在一个字符数据str中,字符串数据在内存中是连续的,此时向字符数据存放数据,无论是采用大端序还是小端序,存储顺序都是相同的。
- 网络协议中通常采用大端序方式,通过网络传输应用程序使用数据时,往往都需要修改字节序。
- Intel x86 CPU采用的小端序。
- 编写一个简单的测试程序。
#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;
}
- 生成EXE文件,然后用OllgDbg调试,使用Go to命令跳转到401000地址处。
- main函数的地址位401000,全局变量b、w、dw、str的地址分别40AC40、40AC44、40AC48、40AC4C,在dump窗口查看它们的值。
- 可以看到变量w与dw数据采用小端序存储。