【大小端字节序存储】

将一个int类型的数据放入四个字节里,具体是怎么放的?

如图 :有两种存放方式,这两种存放方式都是存在的。不同的设备,采用的存放方式可能不同。

像存储方式1,将数据的低位字节放在低地址内存单元,数据的高位字节放在高地址内存单元,叫做小端字节序存储。

像存储方式2,将数据的低位字节放在高地址内存单元,而将数据的高位字节放在低地址内存单元,叫做大端字节序存储。

可以通过下面一段代码知道我们现在正使用的设备采用大端还是小端。

#include <stdio.h>

char TestSizeEnd()
{
	union un
	{
		char ch;
		int i;
	}n1;
	n1.i = 1;
	return n1.ch;
}

int main()
{
	if (TestSizeEnd())
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

首先,我们知道共用体的特点是所有成员共用同一块空间,只能同时只有一个成员在使用这块空间。代码图解:

由图可得:如果以小端存储将返回1,如果以大端存储将返回0。为了验证,也可以通过调试查看内存进行检验。

还可以用下方这段代码去探究大小端的采用情况,更加简洁。

#include <stdio.h>

char TestSizeEnd()
{
	int i = 1;
	return *(char*)&i;
	//将int *的指针类型强制转换为char *再解引用,以char的视角读取一个字节。
}

int main()
{
	if (TestSizeEnd())
		{
			printf("小端\n");
		}
	else
		{
			printf("大端\n");
		}
	return 0;
}

### 回答1: 大端(Big-Endian)模式:数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端(Little-Endian)模式:数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。 ### 回答2: 串口通信的大小端字节序取决于传输的数据类型。在串口通信中,数据通常以字节的形式进行传输。对于字节的存储方式,有两种常见的字节序:大端字节序(Big-Endian)和小端字节序(Little-Endian)。 大端字节序是指将数据的高位字节存储在内存的低地址中,而将数据的低位字节存储在内存的高地址中。这种存储方式常用于网络传输和大部分的大型计算机中。 小端字节序则是将数据的低位字节存储在内存的低地址中,而将数据的高位字节存储在内存的高地址中。这种存储方式常用于一些小型计算机和个人电脑中。 在串口通信中,字节的传输是按照其在内存中的存储顺序进行的。如果通信的两端采用相同的字节序,则数据能够正确地传输。然而,如果通信的两端采用不同的字节序,则数据在接收端可能会发生错误的解析。 为了确保正确的数据传输,通常需要在通信的两端进行字节序的转换。这可以通过将字节按照反转的方式进行重新排列来实现,从而使得传输的字节顺序与接收端相符。 总之,串口通信的大小端字节序是通过对字节的存储方式进行约定来确定的。如果通信双方采用相同的字节序,数据能够正确地传输。否则,需要进行字节序的转换以确保数据的正确解析。 ### 回答3: 串口通信的大小端字节序是指数据在传输过程中的存储顺序。在串口通信中,一个字节通常由8位二进制数据组成,而字节序指的是这8位二进制数据的存储顺序。 小端字节序(Little-endian)是指低位字节存储在内存的低地址处,而高位字节存储在内存的高地址处。在小端字节序中,数据的字节排列顺序是从低位到高位的顺序。例如,十六进制数0x12345678的存储顺序为0x78 0x56 0x34 0x12。 大端字节序(Big-endian)则是指高位字节存储在内存的低地址处,而低位字节存储在内存的高地址处。在大端字节序中,数据的字节排列顺序是从高位到低位的顺序。例如,十六进制数0x12345678的存储顺序为0x12 0x34 0x56 0x78。 在串口通信中,数据的传输是以字节为单位的。当数据从发送端传输到接收端时,发送端和接收端需要使用相同的大小端字节序,以保证数据的正确传输和解析。 需要注意的是,串口通信中的大小端字节序是由通信设备或协议决定的,而不是由计算机的架构决定的。所以,在进行串口通信时,需要了解所使用的通信设备或协议的字节序要求,并进行相应的处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值