Проблема заключается в следующей строке
Console.WriteLine(br.ReadInt16());
Вы пишете 32-битное целое число и читаете только 16 бит назад, что вызывает проблемы при последующих чтениях.
Вы должны иметь
Console.WriteLine(br.ReadInt32());
Это должно решить вашу проблему
Объяснение:
Байты записаны в формате Little Endian, поэтому 10 int и 2 decimalнаписаны следующим образом.Квадратные скобки предназначены для обозначения начала и конца int
и decimal
[0A 00 00 00] [02 00 00 00...00]
Но когда вы читаете int как просто 16-битное значение, это то, как вы сгруппируете биты вчитать
[0A 00] [00 00 02 00 00 00...00]
Как вы можете заметить, int
не страдает в этом процессе и все еще читается как 0x000A
, но десятичное число сдвинуто на 2 байта, переключая его с 0x02
на0x020000
, то есть 131702 в десятичном виде
Если бы формат был прямым порядком байтов, вы бы увидели, что int получает неправильное значение 0x00