cpu大小端与转换

解析二进制数据发现问题,数据不对,计算器算了,对比二进制数据发现字节反了。那就是大小端CPU的问题了

1.大小端由来

计算机存储方式的分歧,比如大端的一个int就是从左到右读4个字节,小端是从右到左。

名字由来是《格列佛游记》,鸡蛋从小端吃还是从大端吃来的。

本人其实不喜欢格列佛只喜欢鲁滨逊,可能更适合带上破琴上街吃百家饭,不适合敲abc。

 

2.测试本机大小端

union U
{
	char a;
	int b;
}u;

bool Big_CPU()
{
	u.b = 1;
	return u.a != 1;
};

如果第一个地址的值为1,则int b 是从高地址往回算的。为小端CPU,intel的好像几乎小端吧。

 

3.大小端转换

typedef unsigned long u_int32;
typedef unsigned short u_int16;
typedef unsigned char u_int8;

u_int16 bswap_16(u_int16 x)
{
	return (((u_int16)(x) & 0x00ff) << 8) | 
		(((u_int16)(x) & 0xff00) >> 8) ;
}

u_int32 bswap_32(u_int32 x)  
{  
	return (((u_int32)(x) & 0xff000000) >> 24) |  
		(((u_int32)(x) & 0x00ff0000) >> 8) |   
		(((u_int32)(x) & 0x0000ff00) << 8) | 
		(((u_int32)(x) & 0x000000ff) << 24) ;  
} 

就是最右边的字节移最左,左移右。中左移中右。。。

结束语:

抄的,方便看而已,这东西谁也没法创新,我这种心态就是适合去流浪

参考文章:

https://blog.csdn.net/wokaowokaowokao12345/article/details/71534472

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值