C程序来检查一下比较大的endian
可能重复:
Cmacros定义来确定大端还是小端?
int main() { int x = 1; char *y = (char*)&x; printf("%c\n",*y+48); }
如果是小端,它将打印1.如果是大端,它将打印0.是否正确? 或者将设置一个char * int x总是指向最不重要的位,而不论是endianness?
总之,是的。
假设我们在一台32位机器上。
如果是小端,内存中的x
将是这样的:
higher memory -----> +----+----+----+----+ |0x01|0x00|0x00|0x00| +----+----+----+----+ A | &x
所以(char*)(*x) == 1
和*y+48 == '1'
。
如果是大端,那将是:
+----+----+----+----+ |0x00|0x00|0x00|0x01| +----+----+----+----+ A | &x
所以这一个将是'0'
。
以下将做。
unsigned int x = 1; printf ("%d", (int) (((char *)&x)[0]));
设置&x
到char *
将使您能够访问整数的单个字节,字节的sorting取决于系统的字节顺序。
这是一个configuration脚本的大端testing:
#include <inttypes.h> int main(int argc, char ** argv){ volatile uint32_t i=0x01234567; // return 0 for big endian, 1 for little endian. return (*((uint8_t*)(&i))) == 0x67; }
以为我知道我已经阅读过有关标准的内容。 但找不到它。 保持寻找。 旧; 回答标题; 不是Q-tex; P:
以下程序将确定:
#include <stdio.h> #include <stdint.h> int is_big_endian(void) { union { uint32_t i; char c[4]; } e = { 0x01000000 }; return ec[0]; } int main(void) { printf("System is %s-endian.\n", is_big_endian() ? "big" : "little"); return 0; }
你也有这个方法 ; 来自Quake II:
byte swaptest[2] = {1,0}; if ( *(short *)swaptest == 1) { bigendien = false;
和!is_big_endian()
不是100%,因为它可以混合/中间。
相信这可以使用相同的方法检查只有从0x01020304
到0x01020304
更改值给予:
switch(ec[0]) { case 0x01: BIG case 0x02: MIX default: LITTLE
但是不完全确定那个…