C语言测试大小端的问题

C语言测试大小端的问题,第1张

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

小森毕孙端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

测试程序:

#include<stdio.h>

int main(void)

{

    int a = 0x12345678

    unsigned char *p=(unsigned char *)&a

    

    if(0x78 == *p)

    {

        printf("little end\n")

    }

    else

    {

        printf("big end\n")

    }

    

    return 0

}

#include<stdio.h>

int check()

{

union check

{

int i

char ch

}c

c.i =1

return (c.ch == 1)

}

int main()

{

int ret

ret = check()

if(ret == 0)

{

printf("Big\n")

}

else

{

printf("little\n")

}

return 0

}

联合体中 变量i 和ch共世哪用同一地址空间,它们都是从低地址开始存放。亏纯变量i的值为0x00 00 00 01, 如果是小端模式则01在低地址上,ch的值如果为01则是小端模式,否则是大端模式。销返咐

在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利饥基或用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。

#include "stdio.h"

int main()

{

  union w

 {

  int a  //4 bytes

  char b //1 byte

 } c

  c.a=1

 烂伍 if (c.b==1)

  printf("It is Little_endian!\n")

  else

  锋高printf("It is Big_endian!\n")

  return 1

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12489948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存