理解字节序
程序员文章站
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 的位置存放的是数据的大小
查看数据区 可以清楚的观察得到是小端序