zoukankan      html  css  js  c++  java
  • 【转】判断机器大小端的两种实现方法

    大端模式(Big-endian):

    是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址

    中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

    小端模式(Little-endian):

    是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,和我们的逻辑方法一致。

    判断大小端方法:1、利用指针强制类型转换; 2、利用共用体所有数据共用同一块地址空间

    1、利用指针强制类型转换

     1 #include<stdio.h>  
     2 int main()  
     3 {  
     4     int a = 1;  
     5     char * p = (char*)&a;  
     6     if (*p == 1)  
     7     {  
     8         printf("little-endian
    ");  
     9     }  
    10     else  
    11     {  
    12         printf("big-endian
    ");  
    13     }  
    14     return 0;  
    15 } 

    如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0;大端的话则1在i的最高地址字节处存放。char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。

    2、利用共用体所有数据共用同一块地址空间

     1 #include<stdio.h>  
     2 union A  
     3 {  
     4     char c;  
     5     int  a;  
     6 }A;  
     7 int main()  
     8 {  
     9     A.a= 1;  
    10     if (A.c == 1)  
    11     {  
    12         printf("little-endian
    ");  
    13     }  
    14     else  
    15     {  
    16         printf("big-endian
    ");  
    17     }  
    18     return 0;  
    19 }  

     联合体union的存放顺序是所有成员都从低地址开始存放,所以很容易就判别出机器的大小端了。 ^_^

    出处

  • 相关阅读:
    mysql的复制
    web页面请求历程
    django工作原理简介
    http协议
    路由器和交换机的区别
    OSI七层模型
    TCP/IP协议总结
    IO复用
    僵尸进程和孤儿进程
    java源代码如何打成jar包
  • 原文地址:https://www.cnblogs.com/skullboyer/p/8526823.html
Copyright © 2011-2022 走看看