4

次の 2 行のコードが「異なる」結果を返す理由を誰かが説明できるかどうか疑問に思っていますか? 逆の値の原因は何ですか? これはエンディアンと関係がありますか?

int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
4

2 に答える 2

13

int.MaxValue.ToString("X")出力7FFFFFFF、つまり2147483647 全体としての数。

一方、メモリ内BitConverter.GetBytesを表すバイトの配列を返します。2147483647お使いのマシンでは、この数値はリトル エンディアン (最上位バイトが最後) で格納されます。AndBitConverter.ToStringは各バイトで個別に動作するため、出力を並べ替えて上記と同じ結果を得ることはなく、メモリの順序が維持されます。

ただし、ビッグエンディアンのforとリトルエンディアンの7F-FF-FF-FFforの 2 つの値は同じです。同じ番号です。int.MaxValueFF-FF-FF-7FBitConverter

于 2011-05-24T07:49:19.670 に答える
-1

私の意見では、かなりうまくフォーマットされたGetBytesバイト配列を返すため、私は推測しますBitConverter.ToString

また、ビットごとの表現は値とは異なる場合があることに注意してください。これは、最も重要なバイトがどこにあるかによって異なります。

h番目

于 2011-05-24T07:33:52.673 に答える