【发布时间】:2010-08-11 20:13:52
【问题描述】:
我正在玩位移。我正在尝试采用 32 位 int,将每个字节保存在 char 数组中,然后重构 int。它以我认为应该的方式工作,除了右边的第二个字节似乎切换了最低位。我的代码是:
int main() {
char paus[2];
char b[4] = "abc";
int c = 6104;
int d = 0xcccccccc;
printf("c in hex: %x\n",c);
printf("d in hex: %x\n",d);
printf("b[0]: %x\nb[1]: %x\n",b[0]&0xff,b[1]&0xff);
printf("b[2]: %x\nb[3]: %x/n",b[2]&0xff,b[3]&0xff);
printf("\n");
b[0] = c >> 24;
b[1] = (c >> 16) & 0xff;
b[2] = (c >> 8) & 0xff;
b[3] = c & 0xff;
printf("b[0]: %x\nb[1]: %x\n",b[0]&0xff,b[1]&0xff);
printf("b[2]: %x\nb[3]: %x\n",b[2]&0xff,b[3]&0xff);
printf("\n");
d = (d << 8) + 0x15;
printf("d in hex: %x\n",d);
d = (d << 8) + b[1];
printf("d in hex: %x\n",d);
d = (d << 8) + b[2];
printf("d in hex: %x\n",d);
d = (d << 8) + b[3];
printf("d in hex: %x\n",d);
fgets(paus,2,stdin);
return 0;
}
输出是:
十六进制的c:17d8
十六进制的 d:cccccccc
b[0]: 61
b[1]: 62
b[2]: 63
b[3]: 0
b[0]: 0
b[1]: 0
b[2]: 17
b[3]: d8
十六进制的d:cccccc15
d 十六进制:cccc1500
d 十六进制:cc150017
d 十六进制:150016d8
除了为什么右边的第二个字节从位移 17 向左 8 位变为 16 之外,一切都有意义? 15 和 00 字节是一路携带的,那为什么 17 字节会发生变化呢?谢谢!
【问题讨论】:
标签: visual-c++