C++编译期间字节序判断
2016-12-20 17:06
375 查看
当前常用的字节序一般就两种,大端序和小端序。
下面列出四种字节序的表达方式。在对应平台下,内存布局为{0x,00,0x01,0x02,0x03}的四字节,表示为十六进制的值就如下面代码所示的。
gcc或clang中可以使用
还有使用
相关的可以看下面这两个网页
在编译时检查字节序
http://codereview.stackexchange.com/questions/45675/checking-endianness-at-compile-time
编译器预定义宏
https://sourceforge.net/p/predef/wiki/Endianness/
下面列出四种字节序的表达方式。在对应平台下,内存布局为{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++ 11的
constexpr关键字特性来做编译时判断的方法。但是我没有编译通过。
相关的可以看下面这两个网页
在编译时检查字节序
http://codereview.stackexchange.com/questions/45675/checking-endianness-at-compile-time
编译器预定义宏
https://sourceforge.net/p/predef/wiki/Endianness/
相关文章推荐
- C++判断本机的字节序的方法研究
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
- 如何在编译时刻判断两个类型是否可以自动转换?——《Modern C++ Design》读书笔记(1)
- 如何判断一个程序是C编译的还是C++编译的
- VS2010无法编译C++:fatal error LNK1123 转换到 COFF 期间失败
- 怎样判断一个程序是用C编译程序还是用C++编译程序编译的?
- 编译时通过宏__BYTE_ORDER判断字节序
- VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- C++编译期间类中的常量
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- 判断一段程序是由C 编译程序还是由C++编译程序编译
- 如何判断程序是由C编译程序编译的,还是由C++编译程序编译的.
- C++编译期间的虚函数调用机制
- 如何判断一段程序是由C编译程序还是由C++编译程序编译的
- 判断当前编译器是C++编译还是C编译
- 【ThinkingInC++】44、编译期间类里的常量