1

我的代码如下所示:

char tDat[]={'a','b','c','d','e','f','g','h'};

printf("%d\n",*(int*)tDat);

最终打印的结果是 1684234849。转换为二进制时为 1100100011000110110001001100001。当二进制再次转换为文本时,

我得到:dcba。

据我了解,我所做的只是将 tDat,最初是 a char*,并将其转换为 a int*,对我来说,这意味着取消引用现在将读取 4 个连续字节而不是 1。然而,在取消引用时,我得到一个与我预期相反的整数。有人可以解释为什么我没有再次得到 abcd 吗?

4

1 回答 1

3

这是因为你碰巧在一台小端的机器上。英特尔处理器是。

这意味着整数存储在内存中,首先是最低有效字节。在您的示例中,LSB 将是“a”,然后是“b”,然后是“c”,MSB 将是“d”。这对应于按照我们的数字约定编写时看起来像“dcba”的 int。

于 2013-09-07T00:14:34.187 回答