是否有一行宏定义来确定机器的端度.我正在使用以下代码,但将其转换为宏会太长.

unsigned char test_endian( void )
{
    int test_var = 1;
    unsigned char *test_endian = (unsigned char*)&test_var;

    return (test_endian[0] == 0);
}

推荐答案

支持任意字节顺序的代码,可以放入名为order32.h的文件中:

#ifndef ORDER32_H
#define ORDER32_H

#include <limits.h>
#include <stdint.h>

#if CHAR_BIT != 8
#error "unsupported char size"
#endif

enum
{
    O32_LITTLE_ENDIAN = 0x03020100ul,
    O32_BIG_ENDIAN = 0x00010203ul,
    O32_PDP_ENDIAN = 0x01000302ul,      /* DEC PDP-11 (aka ENDIAN_LITTLE_WORD) */
    O32_HONEYWELL_ENDIAN = 0x02030001ul /* Honeywell 316 (aka ENDIAN_BIG_WORD) */
};

static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
    { { 0, 1, 2, 3 } };

#define O32_HOST_ORDER (o32_host_order.value)

#endif

你可以通过

O32_HOST_ORDER == O32_LITTLE_ENDIAN

C++相关问答推荐

我的C语言中的回归函数如何工作?

命名信号量不会像进程之间同步中假设的那样工作

使用sd-设备列举设备导致seg错误

问关于C中的指针和数组

C sscanf没有捕获第二个参数

Ebpf内核代码:permission denied:invalid access to map value

如何将已分配的数组(运行时已知的大小)放入 struct 中?

如何将字符串argv[]赋给C中的整型数组?

使用GOTO从多个嵌套循环C继续

SDL 2.0-从数组渲染纹理

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

为什么中断函数会以这种方式影响数组?

防止C++中递归函数使用堆栈内存

这个计算C中阶乘的函数正确吗?

用C语言计算文本文件中的整数个数

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

使用TCL C API导航到列表中的元素

将 struct 数组写入二进制文件时发生Valgrind错误

在C中使用字符串时是否不需要内存分配?

GDB 用内容初始化数组