欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

理解字节序

程序员文章站 2024-03-04 08:06:23
...

前言

在我们的生活中,离不开字节序。
Windows 和 Linux 使用的都是小端序,而Oracle的机器上是大端序。
网络字节序也用的是大端序。
相较来说,大端序更符合人类的阅读习惯,小端序更符合机器的阅读习惯。
字节序本来没什么用,只不过,有时候因为它你会遇到一些麻烦。
做机器级代码分析的时候,如果搞反了,那就是天灾。

如何记忆

小端:低地址放低字节,高地址放高字节

大端:低地址放高字节,高地址放低字节

注意: 字节序只是数据的排列方式,不影响数据的大小

以下是我写的c语言的代码,可以用来判断你机器上所用的字节序

#include<stdio.h>
int main(int argc,char **argv)
{
  int a =0x12345678;
  char  *p=&a;
  int n=sizeof(int)/sizeof(char);
  for(int i=0;i<n;i++)
    {
      printf("%02x ",*p++);
    }
      return 0;
}

在Arch上的运行结果:

78 56 34 12 #

可以看到,先输出的是低地址存放的字节,而字节序的是从左往右逐渐增大的。
这样就可以判断Linux使用的是小端序。使用其他机器也同理。

还有一种方式也可以查看字节序,简单粗暴

直接在虚拟机中编译代码,用OD打开,如图

理解字节序

ebp-4 的位置存放的是数据的大小
查看数据区 可以清楚的观察得到是小端序

相关标签: 字节序