zoukankan      html  css  js  c++  java
  • C/C++字节序(大端/小端)判断

    C/C++大端小端判断

    说的是变量的高字节、低字节在内存地址中的排放顺序。

    变量的高字节放到内存的低地址中(变量的低字节放到内存的高地址中)>大端
    变量的高字节放到内存的高地址中(变量的低字节放到内存的低地址中)
    >小端

    例如,对于int类型变量x=0x30313233,在x86下,考虑到在内存中是按照字节为单位进行数据排布,那么会把0x30,0x31,0x32,0x33这4个值按照某种顺序(大端或者小端)进行存储:从0x30到0x33依次为变量的高字节到低字节,如果是大端字节序存储,则从低内存地址到高内存地址,依次存放:0x30, 0x31, 0x32, 0x33;如果是小端字节序存储,则从低内存地址到高内存地址,依次存放:0x33, 0x32, 0x31, 0x30(用这几个蛋疼的16进制数字,是为了后续强转为char类型并打印的方便而考虑的):

    写个代码验证下:

    void test_little_or_big_endian() {
    	int x;
    	cout << "sizeof(int) is " << sizeof(int) << endl;
    	char x0, x1, x2, x3;
    	x = 0x30313233;
    	cout << *((char*)&x) << endl;
    	x0 = ((char*)&x)[0];
    	x1 = ((char*)&x)[1];
    	x2 = ((char*)&x)[2];
    	x3 = ((char*)&x)[3];
    
    
    	cout << "x0=" << x0 << endl;
    	cout << "x1=" << x1 << endl;
    	cout << "x2=" << x2 << endl;
    	cout << "x3=" << x3 << endl;
        /*
        对于小端序,输出
        x0=3   
        x1=2
        x2=1
        x3=0   //0x30对应到十进制的48,也即是ascii的'0',作为char类型输出显示为0
        */
    }
    
  • 相关阅读:
    PHP开发者的MySQL错误
    shell编程技术和实例《linux0.01内核分析与操作系统设计》
    函数问题1 init_EMUX
    sizeof问题
    C语言读书心得
    《深入浅出MFC》读书感受
    计算机专业学习多年的苦恼
    一个完整的字符设备驱动程序导读
    学习书籍选择
    鼠标滑动、文本添加(倒计时)
  • 原文地址:https://www.cnblogs.com/zjutzz/p/7231183.html
Copyright © 2011-2022 走看看