大小端问题

一、定义

大端模式:
大端模式就是指把数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中,这和我们一般的阅读顺序是一致的。

小端模式:
小端模式与大端模式相反,数据的高字节位置保存在内存的高地址处,数据的低字节保存在内存的低地址处。这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

图解
画张图简单解释下大小端的区别,比如我们要存取一个0x12345678的数据,在大小端机器的存取方式分别是:

20171118130422005.png

二、判断机器大小端方式

字符指针判断
在32位平台下,int占4个字节,而char类型的指针是占一个字节的,如果我们把int强传为char类型的指针,只会保存第一个字节的数据,那么我们只需要判断char里面的第字节和int里面的第一个字节是否是一致即可判断。
如果一致则为小端模式,反之为大端模式。


#include <iostream>
using namespace std;
int main()
{
    int a = 1;
    //0x00 00 00 01    大端存储方式
    //0x01 00 00 00    小端存储方式
    //char 只存一个字节
    //大端 0x00      == 0
    //小端 0x01      == 1  
    if (*(char*)&a == 1)    
        cout << "小端模式" << endl;
    else
        cout << "大端模式" << endl;
    return 0;
}

大端转换成小端模式:

32位:

#define swap32Big2Little(x)    (   ( (x)&(0x0000ffff) ) << 32 | ( (x)&(0xffff0000) >> 32   )

64位:

#define swap64Big2Little(x)    (   ( (x)&(0x00000000ffffffff) ) >> 64 |  ( (x)&(0xffffffff00000000) >>64  )
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容