大端与小端序

  1. 字节序是多字节数据在计算机内存中存储或网络传输时个字节的存储顺序,主要分为两大类,一类时小端序,另一类是大端序。
  2. 一个示例:
BYTE    b       =   0x12;
WORD    w       =   0x1234;
DWORD   dw      =   0x12345678;
char    str[]   =   "abcde";
  • 同一个数据的不同字节序保存时有何不同:
    在这里插入图片描述
  • 数据类型为字节型,其长度为一个字节,保存这样的数据时,无论采用大端序还是小端序,字节顺序都是一样的。
  • 采用大端序存储数据时,内存地址低位存储数据高位,内存地址高位存储数据低位。采用小端字序存储数据时,地址高位存储数据的高位,地址低位存储数据的低位。
  • 字符串“abdcde”被保存在一个字符数据str中,字符串数据在内存中是连续的,此时向字符数据存放数据,无论是采用大端序还是小端序,存储顺序都是相同的。
  1. 网络协议中通常采用大端序方式,通过网络传输应用程序使用数据时,往往都需要修改字节序。
  2. Intel x86 CPU采用的小端序。
  3. 编写一个简单的测试程序。
#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数据采用小端序存储。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值