所以我使用以下代码将整数放入 char[] 或 unsigned char[]
(unsigned???) char test[12];
test[0] = (i >> 24) & 0xFF;
test[1] = (i >> 16) & 0xFF;
test[2] = (i >> 8) & 0xFF;
test[3] = (i >> 0) & 0xFF;
int j = test[3] + (test[2] << 8) + (test[1] << 16) + (test[0] << 24);
printf("Its value is...... %d", j);
当我使用类型 unsigned char 和值 1000000000 时,它会正确打印。
当我使用 char 类型(相同值)时,我得到 98315724 打印?
所以,问题真的是谁能解释到底发生了什么?
在检查两个不同数字的二进制文件后,我仍然无法弄清楚发生了什么。我认为签名是当 MSB 设置为 1 表示负值(但负字符?wth?)
我明确告诉缓冲区要插入什么,以及如何解释内容,所以不明白为什么会发生这种情况。
为了清楚我检查的内容,我在下面包含了二进制/十六进制。
11 1010 1001 1001 1100 1010 0000 0000 // 二进制表示 983157248
11 1011 1001 1010 1100 1010 0000 0000 // 二进制表示 1000000000
3 A 9 9 CA 0 0 // 十六进制表示 983157248
3 B 9 ACA 0 0 // 十六进制表示 1000000000