Двоичное чтение BinaryReader в C#
BinaryReader интерпретирует байты потока как числа и другие примитивы. Он учитывает порядок байт и сдвигает позицию на размер каждого прочитанного значения.
В паре с BinaryWriter объект чтения восстанавливает структуру пакета: сначала заголовок фиксированной ширины, затем полезная нагрузка. Так удобно разбирать бинарные протоколы без ручной арифметики смещений.
Запишем код версии как 16-битное число и прочитаем его с начала буфера. ReadUInt16 забирает два байта, младший первый. В буфер записано 0x0207, и чтение вернёт это число в десятичном виде:
using System.IO;
using MemoryStream stream = new();
using (BinaryWriter writer = new(stream, System.Text.Encoding.UTF8, leaveOpen: true))
{
writer.Write((ushort)0x0207);
}
stream.Position = 0;
using BinaryReader reader = new(stream);
Console.WriteLine(reader.ReadUInt16()); // выведет 519
В буфере лежат байты 0x15 и 0x00, младший байт первый. Прочитайте их как беззнаковое 16-битное число и выведите его в десятичном виде.