1

私のコードは次のようになります:

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

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

最終的に印刷される結果は 1684234849 です。バイナリに変換すると、1100100011000110110001001100001 になります。バイナリを再度テキストに変換すると、

私は得る:dcba。

私の理解では、元は tDat であった tDat を にchar*変換しただけint*です。これは、逆参照すると 1 ではなく 4 連続バイトが読み取られることを意味します。ただし、逆参照すると、私が期待したものの逆に対応する整数。なぜ私がabcdを取り戻せなかったのか誰か説明できますか?

4

1 に答える 1

3

これは、たまたまリトルエンディアンのマシンを使用しているためです。インテルプロセッサーは.

これが意味することは、int が最初に最下位バイトでメモリに格納されるということです。あなたの例では、LSBは「a」、次に「b」、次に「c」になり、MSBは「d」になります。これは、数値規則で記述すると「dcba」のように見える int に対応します。

于 2013-09-07T00:14:34.187 に答える