次の 2 行のコードが「異なる」結果を返す理由を誰かが説明できるかどうか疑問に思っていますか? 逆の値の原因は何ですか? これはエンディアンと関係がありますか?
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
次の 2 行のコードが「異なる」結果を返す理由を誰かが説明できるかどうか疑問に思っていますか? 逆の値の原因は何ですか? これはエンディアンと関係がありますか?
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
int.MaxValue.ToString("X")
出力7FFFFFFF
、つまり2147483647
全体としての数。
一方、メモリ内BitConverter.GetBytes
を表すバイトの配列を返します。2147483647
お使いのマシンでは、この数値はリトル エンディアン (最上位バイトが最後) で格納されます。AndBitConverter.ToString
は各バイトで個別に動作するため、出力を並べ替えて上記と同じ結果を得ることはなく、メモリの順序が維持されます。
ただし、ビッグエンディアンのforとリトルエンディアンの7F-FF-FF-FF
forの 2 つの値は同じです。同じ番号です。int.MaxValue
FF-FF-FF-7F
BitConverter
私の意見では、かなりうまくフォーマットされたGetBytes
バイト配列を返すため、私は推測しますBitConverter.ToString
また、ビットごとの表現は値とは異なる場合があることに注意してください。これは、最も重要なバイトがどこにあるかによって異なります。
h番目