zoukankan      html  css  js  c++  java
  • 关于 大小端

    源地址:http://www.cnblogs.com/wangyuezhuiyi/

    简单来说,小端就是看起来不顺眼的那个。

    0x12345678,存储时也这么存储 12 34 56 78,看起来顺眼,是大端。

    0x12345678,存储时这样存储 78 56 34 12,看起来不顺眼,是小端。

    切记:小端看起来不顺眼。

    判断大小端方法:

    1.char 指针读取int数据一个Byte方法:

    1
    2
    3
    4
    5
    6
    7
    int IsBigEndian()
    {
        int i = 0x12345678;
        unsigned char *p = (unsigned char*)(&i);
        if(*p == (char)0x12) return 1;//12 34 56 78这么存储的,就是大端
        return 0;
    }

     2.利用union的性质,union总是从0地址偏移,联合体union的存放顺序是所有成员都从低地址开始存放

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef union _un
    {
        char ch;
        int i;
    }
    myunion;
     
    int IsLittleEndian()
    {
        myunion un;
        un.i = 1;//对i赋值,如果是小端 01 00 00 00,如果是大端 00 00 00 01
        if(un.ch == 1) return 1;//小端
        return 0;
    }<br>//注意:最好是先给int赋值,然后判断char的值,在给int赋值后能够保证其他3个字节为0<br>int IsLittleEndian1() <br>{ <br>  myunion un; <br>  //un.i = 0;//清零<br>  un.ch = 1;//对ch赋值,低地址字节一定是01,即:01 XX XX XX  除非初始化为0,那么为 01 00 00 00<br>  if(un.i == 1) return 1;//小端 按照小端读出来是1<br>  return 0; <br>}

     大小端总结完毕,记住一点:小端就是看起来不顺眼的那个,这还是公司的某大哥教给我的,我平时总是记不住大小端,从此就记住了。

  • 相关阅读:
    [转载]小谈网络游戏同步
    [ASE][Daily Scrum]11.06
    [Proposal]Tank Battle——Infinite
    [proposal][app]Watch your time!
    [Proposal]Nano-Diary(纳日记)
    LaTeX中用BibTex管理参考文献
    matlab化简符号表达式
    placeholder颜色变化
    链接图片外边出现蓝框(IE8/IE9/IE10)
    图标排列
  • 原文地址:https://www.cnblogs.com/lanye/p/5315199.html
Copyright © 2011-2022 走看看