字节顺序(Byte Order)

1、定义:

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、 大端 两种字节顺序。
不同的平台会有不同的处理方式。

小端 字节序 指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;
例如像地址a写入0x0A0B0C0D之后,在内存中的数据便是:

大端 字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。 
通常来讲,CPU只是简单的从内存中读取和存储数据,然后按照你你程序需要的格式提交,所以架构是小端字节序或是大端字节序不是特别重要。但是当数据替换到不同的平台系统时,系统必须符合数据的格式。
基于X86平台的PC机都是小端字节序的,而有的嵌入式平台则是大端字节序。因而对大于1字节的数据,都要变换其存储顺序。

2、大小端字节序判断:

int IsVAXOrder(void)
{
	short x, *px;
	unsigned char *pc;
	
	px = &x;
	pc = (unsigned char *) px;
	*pc = 1; 
	*(pc+1) = 0;        
	if (x == 1) 
		return 1;           //存储为1 0, 返回1,表示是小端字节序
	else 
		return 0;         //存储为0 1, 否则是大端字节序
}

3、大小端字节序转换:

如果需要转换字节序列,只需写出相应的转换函数即可

template<class T>
T SwapData(T p)
{
	int len = sizeof(T);
	char tmp;
	char *ptr = (char*)&p;
	for(int i=0; i<len/2; i++)
	{
		tmp = ptr[i];
		ptr[i] = ptr[len-1-i];
		ptr[len-1-i] = tmp;
	}
	return p;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值