zoukankan      html  css  js  c++  java
  • 大尾端 小尾端

    提到体系结构时,经常遇到大小尾端的概念,这里做个总结。
        big endian:大尾端,也称大端(高位)优先存储。
        little endian:小尾端,也称小端(低位)优先存储。
       如下00000000 00000000 00000000 00000001的存储
           
        大尾端: 00000000 00000000 00000000 00000001
               addr+0    addr+1     addr+2   addr+3     //先存高有效位(在低地址)
      
       小尾端: 00000001 00000000 00000000 00000000
               addr+0    addr+1     addr+2   addr+3     //先存低有效位(在低地址)
       故要判断机器的体系结构是大尾端还是小尾端,以下程序可以完成任务:
      
       

    #include <stdio.h>
    int main()
    {
        int tt = 1;
        char *c = (char*)(&tt);
        if(*c == 1)
        {
            printf("litte endian\n");
        }
        else
        {
            printf("big endian\n");
        }
        return 0;
    }

    大小尾端数据间的相互转换

    /*
          usage: to convert between the form of big-endian and little-endian
          author: ydzhang
          date: 2008年12月6日20:23:48
    */

    #include <stdio.h>
    typedef unsigned int u32;
    typedef unsigned short u16;

    #define BSWAP_16(x) \
            (u16) ( ((((u16)(x) & 0x00ff)) << 8) \
            | (((u16)(x) & 0xff00) >> 8) )

    u16 bswap_16(u16 x)
    {
        return ((x & 0x00ff) << 8) | ((x & 0xff00) >> 8);
    }

    u32 bswap_32(u32 x)
    {
        return ((x & 0x000000ff) << 24) |
               ((x & 0x0000ff00) << 8) |
               ((x & 0x00ff0000) >> 8) |
               ((x & 0xff000000) >> 24);
    }

    int main()
    {
         u16 num_16 = 0x1234;
         u32 num_32 = 0x12345678;

        printf("%x\n", bswap_16(num_16));
        printf("%x\n", BSWAP_16(num_16));
        printf("%x\n", bswap_32(num_32));
        return 0;
    }

    类别:C 查看评论
  • 相关阅读:
    matlab后处理保存avi动画
    Python3在Windows安装配置及简单试用
    Matlab,C++存取二进制
    批量修改文件名
    这是我的第一篇博客园博客
    android的平台架构及特性
    Android开发学习
    跟着9张思维导图学习Javascript
    如何使用css和jquery控制文章标题字数?
    分离构造器(2-2)
  • 原文地址:https://www.cnblogs.com/dorothychai/p/2268163.html
Copyright © 2011-2022 走看看