1

Bitconverterクラスを使用して abyte arrayhexadecimal値に変換しようとしています。

long hexValue = 0X780B13436587;
byte[] byteArray = BitConverter.GetBytes ( hexValue );
string hexResult = BitConverter.ToString ( byteArray );

上記のコードを 1 行ずつ実行すると、次のように表示されます

ここに画像の説明を入力

hexResult文字列はhexValue (つまり 780B13436587h)と同じになると思っていましたが、得られるものは異なります。

ありがとう!

4

3 に答える 3

5

エンディアン。

BitConverterCPU エンディアンを使用します。これは、ほとんどの人にとってリトルエンディアンを意味します。人間が数字を書くとき、私たちはビッグエンディアンを書く傾向があります (大まかに言えば、数千、数百、数十、数字の順に書きます)。CPU の場合、ビッグエンディアンは、最上位バイトが最初で、最下位バイトが最後であることを意味します。ただし、Itanium を使用していない限り、CPU はおそらくリトルエンディアンです。つまり、最上位バイトがlastで、最下位バイトがfirstです。CPU は、未加工のメモリ内をのぞき見しない限り、これが問題にならないように実装されています。これにより、数値演算とバイナリ演算が期待どおりに機能することが保証されます。でも、BitConverter 生メモリ内を覗いて動作するため、逆のデータが表示されます。

ビッグエンディアン形式の値が必要な場合は、次のことを行う必要があります。

  • ビッグエンディアン順で手動で行う
  • 値を確認し、次のBitConverter.IsLittleEndian場合true:
    • 入力バイトを逆にするか
    • または出力を逆にします
于 2014-09-23T14:01:14.783 に答える
1

よく見ると、BitConverter からの出力のバイトが逆になっています。

数値の 16 進文字列を取得するには、Convert クラスを使用します。

Convert.ToString(hexValue, 16);
于 2014-09-23T13:53:32.593 に答える