デフォルトでは、BinaryWriterクラスは左側の下位ビットを使用してint値を書き込みます(たとえば、結果のファイルを16進エディターで表示すると、(int)6は06 00 00 00になります)。右側の下位ビットが必要です(例:00 00 00 06)。
どうすればこれを達成できますか?
編集:私が探していたものの名前を教えてくれてありがとうstrager。タイトルとタグを編集して、見つけやすくしました。
デフォルトでは、BinaryWriterクラスは左側の下位ビットを使用してint値を書き込みます(たとえば、結果のファイルを16進エディターで表示すると、(int)6は06 00 00 00になります)。右側の下位ビットが必要です(例:00 00 00 06)。
どうすればこれを達成できますか?
編集:私が探していたものの名前を教えてくれてありがとうstrager。タイトルとタグを編集して、見つけやすくしました。
Jon Skeet はここにEndianBitConverter を持っています。必要に応じて、ビッグ/リトル エンディアンを使用してください。または、データを数回シフトするだけです;-p
int i = 6;
byte[] raw = new byte[4] {
(byte)(i >> 24), (byte)(i >> 16),
(byte)(i >> 8), (byte)(i)};
実際には組み込みの方法ではありませんが、これを使用できます: EndianBit*。ジョン・スキートに感謝 :P
バイトオーダー(別名エンディアン)を変更しようとしています。ビッグエンディアンを印刷したい。C#でこれをどのように行うかはわかりませんが、BinaryWritterクラスに送信する前に整数のバイトを交換できます。
System.BitConverter.IsLittleEndianを使用して、現在のシステムのエンディアンを確認できます。BinaryWriterが互換性のためにシステムのエンディアンまたはリトルエンディアンを使用するかどうかはわかりません。
組み込みのものを使用する場合は、System.Net.IPAddress.HostToNetworkOrder() のオーバーロードが多数あります。
「ホスト」の順序は常にリトルエンディアンであり、「ネットワーク」の順序はビッグエンディアンである可能性が圧倒的に高いため、これらはあなたが望むものです。
ただし、ネットワークとはまったく関係がない場合は、これらを使用するのはちょっとしたハックです。
BitConverter を使用してバイト配列を取得し、それを逆にすることもできます。何かのようなもの:
Byte[] bytes = BitConverter.GetBytes(number);
Array.Reverse(bytes);
// Then, to write the values you use
writer.Write(bytes);