判断机器大小端模式的方法

Posted lonelytraveler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断机器大小端模式的方法相关的知识,希望对你有一定的参考价值。

//csapp 2.58

#include <stdio.h>                                                                                                                         
#include <inttypes.h>
#include <limits.h>
typedef unsigned char* char_point;

/**
 * 判断机器类型,大端机返回0, 小端机返回1,其他返回-1
 * author : 
 * date : 2020-5-7 20:54:03
 */
int is_little_endian(void)
{
    int32_t data = 0;
    //转换为字符指针,按字节修改内存数据
    char_point char_data_point = (char_point) &data;

    //只有小端机,为了验证正确性,所以修改高位数据,进行判断,也可以直接修改低位数据判断。
    //0x80 : 1000 0000
    *(char_data_point + 3) = 0x80;

    int result = -1;

    if(INT_MIN == data) {
        result = 1;
    } else if(0x80 == data) {
        result = 0;
    } else {
        printf("data %d
", data);
        result = -1;
    }

    return result;
}

void main(void)
{
    int result = is_little_endian();

    if(1 == result) {
        printf("little endian
");
    } else if (0 == result) {
        printf("big endian
");
    } else if(-1 == result) {
        printf("not support
");
    } else {
        printf("soft error");
    }
}

以上是关于判断机器大小端模式的方法的主要内容,如果未能解决你的问题,请参考以下文章

判断机器的大小端模式

C++怎么判断大小端模式

如何简单的判断机器的大小端字节序

如何简单的判断机器的大小端字节序

C语言%u%d打印的规则数据在内存中的存储及大小端存储模式

关于大小端转换整理总结(包含原始方式Qt方式)