是否有一种编程方式来检测您是否在大端或小端架构上?我需要能够编写将在Intel或PPC系统上执行的代码并使用完全相同的代码(即没有条件编译).
是否有一行宏定义来确定机器的字节顺序.我使用以下代码,但将其转换为宏将太长.
unsigned char test_endian( void )
{
int test_var = 1;
unsigned char test_endian* = (unsigned char*)&test_var;
return (test_endian[0] == NULL);
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
C宏定义确定大端或小端机器?
int main()
{
int x = 1;
char *y = (char*)&x;
printf("%c\n",*y+48);
}
Run Code Online (Sandbox Code Playgroud)
如果它是小端,它将打印1.如果它是大端,它将打印0.这是正确的吗?或者将char*设置为int x始终指向最低有效位,而不管字节顺序如何?
#include<stdio.h>
int main()
{
unsigned int unum = 0x80008001;
short unsigned int *snum = (short unsigned int*)&unum;
printf("%d\n", *snum);
printf("%d\n", *(snum+1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
32769
32768
Run Code Online (Sandbox Code Playgroud)
snum指向unum的最初两个字节,但是它的值是unum的最后两个字节,并且在递增指针之后,value是unum的前两个字节.
所以,它是一个小端系统.但是,我不确定这种方式是否正确,以了解系统的类型.这是对的吗?
endianness ×5
c ×4
algorithm ×1
architecture ×1
byte ×1
c++ ×1
macros ×1
objective-c ×1
perl ×1