zoukankan      html  css  js  c++  java
  • 大端小端问题

    大端字节序与小端字节序

    在计算机中,多字节对象被存储在连续的字节序列中,这就引出了存储字节顺序的问题。分为两种模式:1.高位字节在前,也就是大端字节序(Big Endian),或者2.低位字节在前,也就是小端字节序(Little Endian)。
    例如对于int n = 0x01020304;,假设int大小为4字节,并且该int对象的地址为0x100,那么在大端机器和小端机器上内存布局如下图:
    大端小端演示

    测试自己的机器

    测试系统是大端字节序还是小端字节序,可以利用C++中union的特性,这里还有个小细节那就是在C++中struct,union,enum类型在使用的时候不必带这几个关键字(在C中是需要的):

    #include <iostream>
    #include <cstdint>
    
    union Foo {
        int16_t whole;
        int8_t parts[2];
    };
    
    int main(int argc, const char* argv[]) {
        Foo foo;
        foo.whole = 0x0102;
    
        if (0x01 == foo.parts[0]) {
            std::cout << "Big Endian Machine" << std::endl;
        } else {
            std::cout << "Little Endian Machine" << std::endl;
        }
    
        return 0;
    }
    

    网络字节序

    在TCP/IP中规定网络字节序就是大端字节序。

  • 相关阅读:
    Unity3D笔记十六 输入输出-键盘事件、鼠标事件
    Unity3D笔记十五 碰撞、移动
    Unity3D笔记十四 力
    Unity3D笔记十三 摄像机之间切换
    the pointer this
    argc[] and *argv[]
    Square Detector
    pointer1
    OpenCV1
    OpenCV
  • 原文地址:https://www.cnblogs.com/HachikoT/p/12149525.html
Copyright © 2011-2022 走看看