我测试字节序与条件((char)((int)511) == (char)255)
。真的意味着小,虚假意味着大。
我已经在几个不同的系统,既少,大与优化关闭,以最大测试这一点,使用gcc。在我做的每一个测试中,我都得到了正确的结果。
在需要执行关键操作之前,可以将该条件放入应用程序中。如果你只想机制保障您正在使用正确的字节序为您的整个应用程序,你也可以使用一个静态断言方法如如下:
extern char ASSERTION__LITTLE_ENDIAN[((char)((int)511) == (char)255)?1:-1];
在全球范围内这条线将创建一个编译错误,如果该系统不是小端,并会拒绝编译。如果没有错误,它就会完美编译,就好像该行不存在一样。我发现该错误消息是相当描述:
error: size of array 'ASSERTION__LITTLE_ENDIAN' is negative
现在,如果你是偏执狂你的编译器优化了实际的检查走像我的,你可以做到以下几点:
int endian;
{
int i = 255;
char * c = &i;
endian = (c[0] == (char)255);
}
if(endian) // if endian is little
它压缩在很好地对这个宏:
#define isLittleEndian(e) int e; { int i = 255; char * c = &i; e = (c[0] == (char)255); }
isLittleEndian(endian);
if(endian) // if endian is little
或者,如果你使用GCC,你可以逃脱:
#define isLittleEndian ({int i = 255; char * c = &i; (c[0] == (char)255);})
if(isLittleEndian) // if endian is little
'“%p”'期望一个'void *',而不是一个整数。任何指针都可以在大多数机器上工作,但在技术上是正确的(因为可变参数),所以在使用它时应该明确地施放。 –
好点。我刚刚删除提及它。 – loganfsmyth
此外,您需要使用'“%hhx”'来打印一个'unsigned char'值,而不是一个完整的'unsigned'值。 –