也许你们中的一个可以帮助我。我不知道该怎么做了。我有以下测试代码:
#include <stdio.h>
int main() {
unsigned int block = 0;
unsigned int alp = 0;
char *input ="test";
unsigned int *pt = NULL;
pt = (unsigned int*)input;
alp |= ((*pt) >> 8);
printf("pointer value:\t %d \n", alp);
for(int a = 0; a < 3; a++) {
block |= (unsigned char)input[a];
if(a != 2) {
block <<= 8;
}
}
printf("block value:\t %d \n", block);
return 0;
}
我希望这两个值完全相同,因为它们看起来正好是3个字节。只有值有区别。有人知道为什么会这样吗?或者可以解释一下为什么?
指针值:7631717块值:7628147
使用“gcc测试. c-墙壁-o测试”(gcc(Ubuntu 12.2.0- 3ubuntu 1)12.2.0)编译
多谢
1条答案
按热度按时间lf5gs5x21#
块的值为
如果你使用的是little-endian系统(大多数人都是这样),那么alp的值是
在little-endian系统中,不同的结果是意料之中的。你的CPU读取第一个字节作为最低有效位,最后一个字节作为最高有效位,但是你的for循环读取第一个字节作为最高有效位,最后一个字节作为最低有效位。
More info on endianness