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>

union utype

{

    局戚碰int i

    char a

}

void main()

{

    union 仔巧utype u

    u.i = 1

    if (u.a)

        桐谈printf("小端\n")

    else

        printf("大端\n")

}

这个关键是判断第一个字节的内容比较而来。和书写顺序一致就是大端,不书写顺序不一致就是小端,随便写了一个小测试腊帆圆程序,源码如下:

#include <cstdio>

char endian()

{

int i = 0x423f3f4C//i存储了4个字符轿握,B??L

return *(char *)&i

}

int main(int ac,char **pav)

{

char ch = endian()

if (ch=='L') printf("little endian!\n")

else if (ch=='B') printf("big endian!\n")

else if (ch=='?') printf("unknow endian!\n")

return 0

}

执行效果如下图轮塌所示:

如果是考虑可移植性之类的,你完全可以使用

unsigned  char endian(){int i =  ~0 - 1return *(unsigned char *)(&i)}


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

原文地址: https://outofmemory.cn/yw/12538461.html

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

发表评论

登录后才能评论

评论列表(0条)

保存