typedef union status
{
int nri;
char cit[2];
}Status;
int main() {
Status s;
s.nri = 1;
printf("%d \n",s.nri);
printf("%d,%d,\n",s.cit[0],s.cit[1]);
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
1
0,1
Run Code Online (Sandbox Code Playgroud)
我知道第二行的输出取决于CPU的结束.我怎么能在平台独立的程序中写这样的?有没有办法检查CPU的endianess?
您可以使用htonl()和/或ntohl()。htonl()代表“主机到网络长”,而ntohl()代表“网络到主机长”。“主机”和“网络”指的是字节顺序。网络字节顺序是“big-endian”。如果主机平台也是“big-endian”,则操作将是空操作。使用这些例程,以下程序将始终报告相同的输出:
uint32_t x = htonl(1);
unsigned char *p = (void *)&x;
printf("%u %u %u %u\n", p[0], p[1], p[2], p[3]);
uint32_t y = ntohl(x);
assert(y == 1);
Run Code Online (Sandbox Code Playgroud)