c++ - 根据机器的字节序定义宏
问题描述
我想根据机器的字节序在结构中定义变量,这就是我尝试过的
#define IS_BIG_ENDIAN (!(union { uint16_t u16; unsigned char c; }){ .u16 = 1 }.c)
//#define IS_BIG_ENDIAN (!*(unsigned char *)&(uint16_t){1})
struct A {
#if IS_BIG_ENDIAN
char a:4;
char b:4;
#else
char b:4;
char a:4;
#endif
}
上面的代码给出了错误,这可能实现吗?我的主要目标是实现结构变量的逆序。
解决方案
来自https://sourceforge.net/p/predef/wiki/Endianness/
你没有标准的方式来拥有它。
但自定义标头<sys/param.h>
或<endian.h>
可能提供 MACRO,例如:
Type Macro Value
Big endian __BYTE_ORDER __BIG_ENDIAN
Little endian __BYTE_ORDER __LITTLE_ENDIAN
Little endian (word-swapped) __BYTE_ORDER __PDP_ENDIAN
推荐阅读
- json - 如何使用purpleair.com API
- c# - LibVLC C# 为着色器公开 opengl 纹理
- postgresql - 如何在 PostgreSQL 中使用 COALESCE 和 INTERVAL?
- mongodb - Mongo `$graphLookup` 限制宽度
- android - 如何在水平回收器视图中禁用片段滚动
- javascript - D3.js - 添加新节点并转换后旧链接不会被删除
- c - 置换和组合函数的内存存储
- php - 如何使用 Codeigniter 以 json 格式保存
- ios - WKWebView 加载后 6 秒显示警报
- linux - 意外回声