大小端问题

作者: rmrfany | 来源:发表于2019-01-11 10:42 被阅读6次

一、定义

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

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

图解
画张图简单解释下大小端的区别,比如我们要存取一个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  )

相关文章

  • 大小端问题

    如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中...

  • 大小端问题

    什么是大小端? 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式...

  • 大小端问题

    一、定义 大端模式:大端模式就是指把数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中,这和我们一...

  • 大端小端问题

    为什么有大小端问题 大端 小端 解决大小端方法: 或者:

  • CPU大小端问题

    大小端 CPU有大小端之分,大端是指数据的高位数据保存在低位地址,而低位数据保存在高位地址;小端是指数据的低位数据...

  • 数据大小端问题

    假如有一个4字节的数据为 0x12 34 56 78(十 进制:305419896 ,0x12为高字节,0x78...

  • iOS 开发之字符编码 大小端问题

    一、什么是大小端问题 (From《ComputerSystems,AProgramer'sPerspective》...

  • union分配和大小端

    题目: 看程序写出输出结果 基本概念: 这题涉及到Union的内存分配问题和大小端的问题。 下面先对大小端和Uni...

  • 大小端

    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数...

  • 大小端

    我还是弄不清,记不住到底哪个大,哪个小,所以我暂时先不管了 bool IsLittleEndian() { i...

网友评论

    本文标题:大小端问题

    本文链接:https://www.haomeiwen.com/subject/lfvtdqtx.html