#include <arpa/inet.h>
#define JPEG_MAGIC (('J'<<24) | ('F'<<16) | ('I'<<8) | 'F')
// Result will be in 'host' byte-order
unsigned long jpeg_magic = JPEG_MAGIC;
// Result will be in 'network' byte-order (IE. Big-Endian/Human-Readable)
unsigned long jpeg_magic = htonl(JPEG_MAGIC);
int i = 7;
char* pc = (char*)(&i);
if (pc[0] == '\x7') // aliasing through char is ok
puts("This system is little-endian");
else
puts("This system is big-endian");
如果 加速可用,那么您可以使用 Boost.Predef,它包含各种针对目标平台的预定义宏,包括 endianness (BOOST_ENDIAN_*)。是的,加速通常被认为是一个 C + + 库,但是这个是一个预处理器头,也可以和 C 一起工作!它允许你在 编译时中便携地检测端点
这个库定义了一组编译器、体系结构、操作系统、库和其他版本号,它可以从 C、 C + + 、 Objective C 和 Objective C + + 预定义的宏或在通常可用的头中定义的宏中收集信息。这个库的想法源于一个提议,即扩展 Boost Config 库,以提供比它所支持的特性定义更多、更一致的信息。下面是这个简短建议的编辑版本。
For example
#include <boost/predef.h>
// or just include the necessary header
// #include <boost/predef/other/endian.h>
#if BOOST_ENDIAN_BIG_BYTE
#elif BOOST_ENDIAN_LITTLE_BYTE
#elif BOOST_ENDIAN_LITTLE_WORD
...
#endif