3

特定のバイト配列をintに変換したい。次に、プロセスを逆にしたいと思います。つまり、その int から元のバイト配列を取得したいのです。私はこのようなものがうまくいくと思った:

byte[] myBytes = { 0, 0, 0, 32 };
if (BitConverter.IsLittleEndian)
    Array.Reverse(myBytes);
int i = BitConverter.ToInt32(myBytes, 0);
Console.WriteLine("int: {0}", i); // Output: 32

byte[] newBytes = BitConverter.GetBytes(i);
Console.WriteLine("byte array: " + BitConverter.ToString(newBytes));
// Outputs: 20-00-00-00

したがって、元のバイト配列は返されません。私は何を間違っていますか?

4

1 に答える 1

3

Array.Reverse明らかな理由もなくバイトを逆にしています-の変換とからBitConverter変換の両方に を使用しているため、呼び出しはまったく必要ありません。intintArray.Reverse

バイト配列をビッグ エンディアンとして扱いたい場合、リトル エンディアンに直面している場合は、一方だけでなく両方のケースでBitConverter配列を逆にする必要があります。基本的には可逆変換を提供するものと見なすべきですが、それはあなたが望む正確な変換ではないかもしれません.BitConverter

この種の変換のエンディアンを指定する場合は、myEndianBitConverterを my MiscUtilプロジェクトで使用することをお勧めします。

于 2013-05-05T11:53:50.710 に答える