Question
ある整数型をリトルエンディアン(あるいはビッグエンディアン)でbyte
配列に書き込みたい。
または、byte
配列に書き込まれているリトルエンディアン(あるいはビッグエンディアン)の整数型を復元したい。
どうすればいいか。
BitConverter
クラスのGetBytes
やToInt32
にはバイトオーダーを指定する方法はない。
Answer
BinaryPrimitives
クラスを使用する。
-
ReadOnlySpan<byte>
から整数型(int
)を復元するにはReadInt32BigEndian
/ReadInt32LittleEndian
- 整数型(
int
)の内容をSpan<byte>
に書き出すにはWriteInt32BigEndian
/WriteInt32LittleEndian
メソッドを使用する。
int i1 = 12345678;
var buffer = new byte[255];
BinaryPrimitives.WriteInt32LittleEndian(buffer.AsSpan(0, 4), i1);
int i2 = BinaryPrimitives.ReadInt32LittleEndian(buffer.AsSpan(0, 4));
int
型だけでなく、short
, ushort
からlong
, ulong
型までサポートされている。
このクラスはSystem.Buffers.Binary
名前空間にあり、.NET Core 2.1から使用できる。
.NET Frameworkを利用している場合、System.Memory
をNuGetで入手すれば使用できるようだ。
(System.Buffers
ではない。)