【发布时间】:2013-01-11 17:41:41
【问题描述】:
这是用于在运行时检测字节顺序的常用技巧,例如在 C FAQ 中看到的:
int x = 1;
if (*(char *)&x == 1)
{
/* little-endian */
}
else
{
/* big-endian */
}
根据我对标准的阅读,它不会导致未定义的行为,因为它没有违反严格的别名规则。
无论如何,只要unsigned char以外的整数类型可以包含填充位(如x),那么条件*(char *)x == 1即使是little-endian系统也不会出错吗?
在这种情况下,工会的解决方案是否更适合这样做?
【问题讨论】:
-
在可以将任意填充散布到整数变量中的系统上,“字节顺序”的含义是什么? reinterpret-as-char 向您展示的只是数据的二进制表示。由你给它起一个可爱的名字。
-
这段代码的主要问题是它假设系统是小端或大端。如果两者都不是,它会将其错误归类为其中一个。
标签: c padding endianness