3

デフォルトでは、BinaryWriterクラスは左側の下位ビットを使用してint値を書き込みます(たとえば、結果のファイルを16進エディターで表示すると、(int)6は06 00 00 00になります)。右側の下位ビットが必要です(例:00 00 00 06)。

どうすればこれを達成できますか?

編集:私が探していたものの名前を教えてくれてありがとうstrager。タイトルとタグを編集して、見つけやすくしました。

4

6 に答える 6

6

Jon Skeet はここにEndianBitConverter を持っています。必要に応じて、ビッグ/リトル エンディアンを使用してください。または、データを数回シフトするだけです;-p

        int i = 6;
        byte[] raw = new byte[4] {
            (byte)(i >> 24), (byte)(i >> 16),
            (byte)(i >> 8), (byte)(i)};
于 2008-12-18T22:40:21.093 に答える
6

実際には組み込みの方法ではありませんが、これを使用できます: EndianBit*。ジョン・スキートに感謝 :P

于 2008-12-18T22:40:54.807 に答える
2

バイトオーダー(別名エンディアン)を変更しようとしています。ビッグエンディアンを印刷したい。C#でこれをどのように行うかはわかりませんが、BinaryWritterクラスに送信する前に整数のバイトを交換できます。

System.BitConverter.IsLittleEndianを使用して、現在のシステムのエンディアンを確認できます。BinaryWriterが互換性のためにシステムのエンディアンまたはリトルエンディアンを使用するかどうかはわかりません。

于 2008-12-18T22:33:32.763 に答える
1

組み込みのものを使用する場合は、System.Net.IPAddress.HostToNetworkOrder() のオーバーロードが多数あります。

「ホスト」の順序は常にリトルエンディアンであり、「ネットワーク」の順序はビッグエンディアンである可能性が圧倒的に高いため、これらはあなたが望むものです。

ただし、ネットワークとはまったく関係がない場合は、これらを使用するのはちょっとしたハックです。

于 2008-12-18T23:15:34.907 に答える
1

BitConverter を使用してバイト配列を取得し、それを逆にすることもできます。何かのようなもの:

Byte[] bytes = BitConverter.GetBytes(number);
Array.Reverse(bytes);

// Then, to write the values you use
writer.Write(bytes);
于 2008-12-19T00:59:08.647 に答える
0

今は役に立ちませんが、BinaryReder/Writer の接続チケットを作成して、すぐにBigendian をサポートできるようにしました。ここで投票してください

于 2009-08-25T13:24:33.990 に答える