大小端

首先先解释一下大小端的概念

大端就是数据的高字节存在内存的低地址,低字节存在内存的高地址

小端就是数据的高字节存在内存的高地址,低字节存在内存的低地址

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	union{
		short s;
		char c[4];
	}un;
	un.s = 010101;
	if (un.c[0] == 16 && un.c[1] == 65)
		printf("big-endian\n");
	else if (un.c[0] == 65 && un.c[1] == 16)
		printf("little-endian\n");
	else
		printf("unknown\n");
	system("pause");
}

如何判断大小端

我们可以使用联合体,利用联合体的特性,所有元素都是从低地址开始存放,而且所有元素共享空间,由上面代码便可以判断大小端。通过判断,便可以知道我们所使用的机器是大端还是小端。当然大小端跟CPU和所使用的擦做系统有关,Intelx86CPU下的机器都是小端。

需要考虑大小端的场景

两台大小端不同的机器在网络上传输需要考虑大小端,因为大小端不同,字节存放次序不同,那么这时就需要转换大小端,这时就需要用到网络字节序。

网络字节序

在tcp/ip协议中把接收到的第一个字节当作高位字节看待,这要求发送端发送的第一个字节是高字节;而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,也就是说,该数值在内存中的起始地址处对应的那个字节就是要发送的第一个高位字节(即:高位字节存放在低地址处),因此网络字节序是大端。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值