为什么,当我将char []转换为int时,我是否会得到一个按字节顺序的反转

时间:2013-09-06 23:38:35

标签: c pointers casting

我的代码如下:

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

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

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

我得到:dcba。

根据我的理解,我所做的就是把tDat,原来是char*,并将其转换为int*,对我而言,这意味着取消引用现在将连续4次读取然而,在取消引用时,我得到一个对应于我所期望的反转的整数。有人可以解释为什么我没有再次获得abcd吗?

1 个答案:

答案 0 :(得分:3)

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

这意味着int将存储在具有最低有效字节的存储器中。在你的例子中,LSB将是'a',然后是'b',然后是'c',MSB将是'd'。这对应于一个在我们的数字约定写入时看起来像“dcba”的int。