【发布时间】:2011-07-22 21:30:34
【问题描述】:
可能重复:
How to check whether a system is big endian or little endian?
如何知道正在使用的机器是大端还是小端?有没有我可以写的代码来做到这一点?
【问题讨论】:
标签: objective-c c
可能重复:
How to check whether a system is big endian or little endian?
如何知道正在使用的机器是大端还是小端?有没有我可以写的代码来做到这一点?
【问题讨论】:
标签: objective-c c
int main()
{
unsigned int i = 0x12345678; // assuming int is 4 bytes.
unsigned char* pc = &i;
if (*pc == 0x12)
printf("Big Endian. i = 0x%x, *pc = 0x%x\n", i, *pc);
else if (*pc == 0x78)
printf("Little Endian. i = 0x%x, *pc = 0x%x\n", i, *pc);
return 0;
}
【讨论】:
下面的代码应该会给你答案。
#include <stdio.h>
int main() {
long x = 0x44434241;
char *y = (char *) &x;
if(strncmp(y,"ABCD",4)){
printf("Big Endian\n");
}else{
printf("little Endian\n");
}
}
解释
在little endian 中,4 个字节存储为[4th, 3rd , 2nd, 1st]。 0x41 是 A 和 0x42 是 B 等等。这个字节流被解释为字符串,使用strncpy我们确定字节在机器中的实际排列方式,并决定它的little or big endian。
【讨论】: