这就是我今天在接受采访时提出的.
int is_little_endian(void)
{
union {
long l;
char c;
} u;
u.l = 1;
return u.c == 1;
}
Run Code Online (Sandbox Code Playgroud)
我的面试官坚持认为c并且l不能保证在同一地址开始,因此,应该改变联盟说,char c[sizeof(long)]并且应该将返回值更改为u.c[0] == 1.
工会成员可能不会在同一地址开始是否正确?
我对工会成员不确定,但是他们来救援了.
检查可以更好地写为:
int is_bigendian(void) {
const int i = 1;
return (*(unsigned char*)&i) == 0;
}
Run Code Online (Sandbox Code Playgroud)
顺便提一下,C FAQ显示了两种方法:如何确定机器的字节顺序是big-endian还是little-endian?