• 大端小端(1)


    首先看下大小端的概念吧,我老是会有点乱...

    来自百度百科的解释:

    大端模式,是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
    小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

    简单来说,从内存地址增加的方向来说,大端就是先存放高序字节,小端就是先存放低序字节。

     通常网路字节序为大端。

    例如:0x0102

    -------->内存增加的方向------>

    地址A------>地址A+1

    大端:01    02

    小端:02      01

    判断方法是利用union的一个特性,那就是里面的变量共享一段内存。

    可以定义一个union.

    union  Test{

    short num;//2byte

    char c[sizeof(num)];//2byte

    } ;

    然后存入一个0x0102或者其他数字到test.num中,因为共享内存的原因,可以访问c[1],c[2],查看里面的值来判断大小端。

    一个实现是(参照unix网络编程中的一个例子):

    #include <stdio.h>  
    #include <conio.h>  
    union Test{  
          short num;  
          char c[sizeof(short)];  
    };  
    int main()  
    {  
        union Test t;//C++ 直接声明为Test t即可   
        t.num=0x0102;  
        if(t.c[0]==1&&t.c[1]==2)  
            printf("大端!
    ");  
        else if(t.c[0]==2&&t.c[1]==1)         
            printf("小端!
    ");      
        else  
            printf("未知!
    ");  
        getch();   
        return 0;  
           
    }  

    在Win7 32bit里面用DEV c++运行的结果为:

    小端

  • 相关阅读:
    金融市场的初步了解
    今天参加了一个猎头实践
    前端面试
    web前端 浏览器私有前缀
    背景渐变
    移动web开发之响应式开发
    移动WEB开发之rem适配布局
    flex布局
    常见快捷方式
    virtual
  • 原文地址:https://www.cnblogs.com/renzhuang/p/6661865.html
Copyright © 2020-2023  润新知