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

当前常用的字节序一般就两种,大端序和小端序。
下面列出四种字节序的表达方式。在对应平台下,内存布局为{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关键字特性来做编译时判断的方法。但是我没有编译通过。
相关的可以看下面这两个网页

posted @ 2016-12-20 17:06  乌合之众  阅读(2060)  评论(0编辑  收藏  举报
clear