其他分享
首页 > 其他分享> > C语言-高\低地址 高\低字节 大小端序 大小端序数据转换

C语言-高\低地址 高\低字节 大小端序 大小端序数据转换

作者:互联网

文章目录

本篇文章分为四个部分

高低地址

计算机按照字节寻址,每一个地址指向内存中的一个字节。
在下图中,每一个色块表示内存中的一个字节,箭头处表明了其在内存中的地址。图中地址位32位,说明为32位机器。0x00000000位低地址,0x00000002相对为高地址。
图1

高低字节

高低字节与内存中的位置无关,描述的是数据中字节的权。例如

int i = 0x00000a0b;
0a 这个字节为高字节,0b这个字节为低字节,原因是0a所处的位置权较大,而0b所处位置的权较小。

大小端序

int i = 0x00010002;

下面两幅图分别表示 int i 在内存中的大小端序存储方式。

大小端序数据转换

大小端序的转换一般用于网络中信息传递,当数据从不同端序的机器传递时,需要有特定的程序转换数据。

转换的思想是将各个字节取出,再重新组合。根据这种想法,可以设计出两种方式。

本文给出第二种方式的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