美文网首页
叁:大小端模式(Big_Little_Endian)

叁:大小端模式(Big_Little_Endian)

作者: 恰冯同学年少 | 来源:发表于2016-06-29 00:39 被阅读52次

1:处理器存储多字节数据时,存在大端和小端模式;
2:处理器存储单字节数据时,位顺序也存在大端和小端模式;
3:小端模式:低地址存储低位的数据(字节),高地址存储高位数据(字节);
4:大端模式:低地址存储高位数据(字节),高地址存储高位数据(字节);


One:使用共同体结构判断多字节存数模式

/********************************
*Function:测试处理器大小端模式
*Platform:X86
*Compiler:GCC
*Author:Programme By Golf
** *****************************/

#include <stdio.h>

typedef union 
{
    unsigned short  Data;
    struct
    {
        unsigned char a[2];
    }cc;
}Big_Little;

Big_Little big_little; 

void main()
{
    char *ptr1 = "Little_Mode"; 
    char *ptr2 = "Big_Mode";
    big_little.Data = 0x11aa;
    if(big_little.cc.a[0] == 0xaa && big_little.cc.a[1] == 0x11)
    {
        printf("big_little.Data = 0x%x\n",big_little.Data);
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[0],big_little.cc.a[0]);
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[1],big_little.cc.a[1]);
        printf("%s\n",ptr1);
    }
    if(big_little.cc.a[1] == 0xaa && big_little.cc.a[0] == 0x11)
    {
        printf("big_little.Data = 0x%x\n",big_little.Data); 
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[0],big_little.cc.a[0]);
        printf("addre = %p value = 0x%x\n",&big_little.cc.a[1],big_little.cc.a[1]);
        printf("%s\n",ptr2);
    }
}

Two:使用共同体结构判断单字节存数模式(位顺序)

/********************************
 * *Function:测试处理器大小端模式
 * *Platform:X86
 * *Compiler:GCC
 * *Author:Programme By Golf
 * ** *****************************/

#include <stdio.h>

typedef union
{
    unsigned char data;
    struct
    {
        unsigned char a:1;
        unsigned char b:1;
        unsigned char c:1;
        unsigned char d:1;
        unsigned char e:1;
        unsigned char f:1;
        unsigned char g:1;
        unsigned char h:1;
    }cc;
}big_little;

big_little Big_Little;

void main()
{
    
    Big_Little.data = 0x01;
    if(Big_Little.cc.a == 0x01)
        printf("Little_MOde\n");
    else
    if(Big_Little.cc.h == 0x01)
        printf("Big_MOde\n");
    else
        printf("error\n");
}

Three:使用指针判断大小端模式

/******************************
*测试处理器大小端模式
*Platform:X86
*Compiler:GCC
*Author:Programme By Golf
*****************************/

#include <stdio.h>

void main(void)
{
    char c1;
    char c2; 
    short *ptr;
    *ptr = 0x11aa;
    c1 = *((char *)ptr);
    c2 = *((char *)ptr+1);
    printf("c1_address = %p,c1_value = 0x%x\n",(char *)ptr,(unsigned char)c1);
    printf("c2_address = %p,c2_value = 0x%x\n",(char *)ptr+1,c2);
    if((unsigned char)c1 == 0xaa)
        printf("Little_Endian\n");
    if((unsigned char)c1 == 0x11)
        printf("Big_Endian\n");
}

以上代码,在ubuntu10.04系统验证通过,X86架构处理器为小端模式;

相关文章

  • 叁:大小端模式(Big_Little_Endian)

    1:处理器存储多字节数据时,存在大端和小端模式;2:处理器存储单字节数据时,位顺序也存在大端和小端模式;3:小端模...

  • 大小端模式

    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数...

  • 大小端模式

    在存储器中的数据存储方式有两种: 大端模式 小端模式 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字...

  • 大小端模式

    问题引入 加3g实验室的艰难之旅,遇到一道这样的实验室面试题: 阅读以下代码,计算结果。 ** 输出结果为2000...

  • 大小端模式

    一般解决大小端问题 使用union和指针两个方法来判断。 大小端模式:就是表示一个数值放在内存中的格式,高位对高地...

  • 大端小端问题总结

    大小端介绍问题总结 一、简介大小端定义 大端模式所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内...

  • C语言判断机器CPU大小端模式的两种方法

    C语言判断机器CPU大小端模式的两种方法 本文介绍使用C语言编写程序判断机器CPU大小端模式的两种方法。 第一种方...

  • 十进制数字转十六进制,固定长度

    区分大小端模式以数字1举例,在小端模式下,转换成16进制为0x0100,可以看出01在前,那么在大端模式下就是0x...

  • Objective-C对象的本质

    0. 基础准备 0.1 大小端模式的内存存储和读取规则 arm64采用的是小端模式 存储:数据的低位保存在内存的低...

  • 单片机存储中的大小端格式

    嵌入式开发者应该对大小端模式都非常了解,特别是我们在做通信时,数据的大小端存储方式不同会对我们影响很大!!!下面我...

网友评论

      本文标题:叁:大小端模式(Big_Little_Endian)

      本文链接:https://www.haomeiwen.com/subject/cvotjttx.html