在一行中检测系统字节序
Detect system endianness in one line?
可能的重复项:
在C++程序中
以编程方式检测字节序 C 宏观定义确定大端还是小端机?
目前,我有以下功能来检测系统字节序:
inline bool detectSystemEndianness()
{
int i = 1;
char *c = reinterpret_cast<char*>(&i);
return (c[0] != i);
}
如果小端,它返回false
,如果大端,则返回true
。第一个问题:这个函数可以吗?
第二个问题:我想初始化一个静态变量,而不是这个函数:
static bool _systemEndianness = /* SOMETHING */
怎么办呢?(它必须在执行时完成,而不是在编译时完成......至少我是这么认为的)
2 种方式
1)为各种平台定义一个预处理器,这样您就可以在编译时而不是运行时对各种字节序进行操作(速度明显更快,但在不知道所有平台的情况下更难实现
2)类似于你的函数:
inline bool isLittleEndian()
{
static const int i = 1;
static const char* const c = reinterpret_cast<const char* const>(&i);
return (*c == 1);
}
...
static const bool _systemEndianness = isLittleEndian ();
相关文章:
- 在UNIX系统中使用DIR查找文件的字节大小
- "configure"脚本如何检测我的系统是否支持某些头文件或 cpp 功能?
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 如何检测两个文件条目是否引用与Qt相同的物理文件系统?
- 如何使用低级系统调用从 stdin 和输入文件中获取字节数
- C++ boost::文件系统如何检测路径是文件还是目录
- 系统调用检测和监测
- 正在检测来自我的英特尔系统的 CPU 和内核信息
- Valgrind 错误:系统调用参数 epoll_pwait(sigmask) 指向不可寻址的字节
- 检测系统是否可以运行 amd64 可执行文件
- 正确处理字节对齐问题 - 通过UDP在16位嵌入式系统和32位桌面之间
- 检测本地化的 Windows XP 安装的系统语言
- 在一行中检测系统字节序
- Qt::如何识别/检测系统是否被Linux中的其他系统远程访问
- C++ / Boost 文件系统 - 检测到"_MSC_VER"不匹配:值'1700'与值"1600"不匹配
- 如何检测单个文件的文件系统大小限制
- 使用Windows技术检测复制,粘贴,打印系统命令
- 检测系统重启并启动应用程序
- Waitforsingleobject用于检测系统命令退出
- 关于碰撞检测系统中的类结构的建议