C语言-高\低地址 高\低字节 大小端序 大小端序数据转换
作者:互联网
文章目录
本篇文章分为四个部分
高低地址
计算机按照字节寻址,每一个地址指向内存中的一个字节。
在下图中,每一个色块表示内存中的一个字节,箭头处表明了其在内存中的地址。图中地址位32位,说明为32位机器。0x00000000位低地址,0x00000002相对为高地址。
高低字节
高低字节与内存中的位置无关,描述的是数据中字节的权。例如
int i = 0x00000a0b;
0a 这个字节为高字节,0b这个字节为低字节,原因是0a所处的位置权较大,而0b所处位置的权较小。
大小端序
int i = 0x00010002;
下面两幅图分别表示 int i 在内存中的大小端序存储方式。
-
大端序 big NDN(endian),高字节位于低地址
-
小端序 little NDN(endian),低字节位于低地址
大小端序数据转换
大小端序的转换一般用于网络中信息传递,当数据从不同端序的机器传递时,需要有特定的程序转换数据。
转换的思想是将各个字节取出,再重新组合。根据这种想法,可以设计出两种方式。
- 将数据的每个字节放置与数组中,在逆序组合,可完成转换。
- 使用位运算
本文给出第二种方式的int数据大小端转换的宏定义
#include <stdio.h>
#define little_NDN2big_NDN(A) ( (A & 0xff000000) >> 24) \
|( (A & 0x00ff0000) >> 8) \
|( (A & 0x0000ff00) <<8) \
|( (A & 0x000000ff) << 24)
int main()
{
int a = 0x00010000;
int b = little_NDN2big_NDN(a);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
输出
65536
256
标签:端序,字节,int,C语言,地址,低字节,大小 来源: https://blog.csdn.net/michealoven/article/details/113782754