解析二进制数据发现问题,数据不对,计算器算了,对比二进制数据发现字节反了。那就是大小端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