【发布时间】:2011-01-07 04:54:56
【问题描述】:
是否有单行宏定义来确定机器的字节顺序。我正在使用以下代码,但将其转换为宏会太长。
unsigned char test_endian( void )
{
int test_var = 1;
unsigned char *test_endian = (unsigned char*)&test_var;
return (test_endian[0] == 0);
}
【问题讨论】:
-
为什么不在宏中包含相同的代码?
-
您不能仅使用 C 预处理器就可移植地确定字节顺序。您还希望在最终测试中使用
0而不是NULL,并将test_endian对象之一更改为其他对象:-)。 -
还有为什么需要宏?内联函数会做同样的事情,而且更安全。
-
@Sharptooth,宏很有吸引力,因为它的值可能在编译时就知道了,这意味着您可以使用平台的字节序来控制模板实例化,或者甚至可以选择不同的代码块
#if指令。 -
确实如此,但效率低下。如果我有一个 little-endian cpu,并且我正在将 little-endian 数据写入线路或文件,我宁愿避免无意义地解包和重新打包数据。我曾经以编写视频驱动程序为生。在将像素写入视频卡以优化每个可以优化的地方时,这一点非常。
标签: c architecture macros endianness