C++编译期间字节序判断

时间:2022-06-27 01:33:30

当前常用的字节序一般就两种,大端序和小端序。

下面列出四种字节序的表达方式。在对应平台下,内存布局为{0x,00,0x01,0x02,0x03}的四字节,表示为十六进制的值就如下面代码所示的。

ENDIAN_BIG		= 0x00010203,	/* 大端序 ABCD */
ENDIAN_LITTLE = 0x03020100, /* 小端序 DCBA */
ENDIAN_BIG_WORD = 0x02030001, /* 中端序 CDAB, Honeywell 316 风格 */
ENDIAN_LITTLE_WORD = 0x01000302 /* 中端序 BADC, PDP-11 风格 */

gcc或clang中可以使用 __BYTE_ORDER__宏来判断

#include <stdio.h>
#include <stdlib.h> int main()
{
// 这两个宏是gcc或者clang支持的
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
puts("小端序");
#elif __BYTE_ORDER__== __ORDER_BIG_ENDIAN__
puts("大端序");
#else
puts("未知字节序");
#endif // __BYTE_ORDER__
return 0;
}

还有使用C++ 11constexpr关键字特性来做编译时判断的方法。但是我没有编译通过。

相关的可以看下面这两个网页