Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用同一掩码获取msb和lsb在endianess方面是否可移植?_C_Endianness_Byte Shifting - Fatal编程技术网

C 使用同一掩码获取msb和lsb在endianess方面是否可移植?

C 使用同一掩码获取msb和lsb在endianess方面是否可移植?,c,endianness,byte-shifting,C,Endianness,Byte Shifting,假设下面的C代码在32位平台上运行(因此sizeof(int)=4),那么下面的代码是否可以在big-endian和little-endian之间移植? 当我问“是否可移植”时,我的意思是应用程序是否将打印: a) 在一个小小的endian平台上 Address is 0xAABBCCDD MSB is AA LSB is DD little endian Address is 0xAABBCCDD MSB is AA LSB is DD big endian b) 在大端平台上 Addre

假设下面的C代码在32位平台上运行(因此sizeof(int)=4),那么下面的代码是否可以在big-endian和little-endian之间移植? 当我问“是否可移植”时,我的意思是应用程序是否将打印:

a) 在一个小小的endian平台上

Address is 0xAABBCCDD
MSB is AA
LSB is DD
little endian
Address is 0xAABBCCDD
MSB is AA
LSB is DD
big endian
b) 在大端平台上

Address is 0xAABBCCDD
MSB is AA
LSB is DD
little endian
Address is 0xAABBCCDD
MSB is AA
LSB is DD
big endian
?

#包括
typedef无符号字符uint8;
typedef无符号整数uint32;
#定义为bigendian()((*(uint8*)&var)==0)
int main()
{
uint32 var=1;
uint8 msb;
uint8 lsb;
printf(“地址是%x\n”,(uint32)和var);
msb=((uint32)和var)&0xFF000000)>>24;
lsb=((uint32)和var)&0x000000FF)>>0;
printf(“MSB为%x\n”,MSB);
printf(“LSB是%x\n”,LSB);
if(是_bigendian())
{
printf(“big-endian\n”);
}
其他的
{
printf(“little endian\n”);
}
返回0;
}

endianness仅在不同大小的数据类型之间进行操作时才会影响您。1。不要定义自己的整数类型,请使用标准。一个。2. <代码>是_bigendian()没有意义,
var
总是零,它的所有字节都是零。3.你不需要知道endianness。位运算不关心它。对标题的回答是“是”。@n.“代词m。很抱歉,编辑错误,当然var需要不同于0才能使宏工作;我的问题是lsb和msb变量在big-endian和little-endian体系结构上是否具有相同的值这些代码毫无意义。如果一个地址被解释为整数0xAABBCCDD,那么它的最高有效字节(作为32字节整数)是0xAA,最低有效字节是0xDD,这与endianness无关。移动和屏蔽地址与结尾无关。如果要调查存储在内存中的值的endianness,则需要检查内存中的字节。endianness仅在不同大小的数据类型之间进行操作时才会对您产生影响。1。不要定义自己的整数类型,请使用标准。一个。2. <代码>是_bigendian()没有意义,
var
总是零,它的所有字节都是零。3.你不需要知道endianness。位运算不关心它。对标题的回答是“是”。@n.“代词m。很抱歉,编辑错误,当然var需要不同于0才能使宏工作;我的问题是lsb和msb变量在big-endian和little-endian体系结构上是否具有相同的值这些代码毫无意义。如果一个地址被解释为整数0xAABBCCDD,那么它的最高有效字节(作为32字节整数)是0xAA,最低有效字节是0xDD,这与endianness无关。移动和屏蔽地址与结尾无关。如果您试图研究存储在内存中的值的endianness,那么您需要检查内存中的字节。