Документы для BitConverter.ToInt32
на самом деле имеют довольно хорошие примеры.Предполагая, что BitConverter.IsLittleEndian
возвращает true, array[0]
- это наименее значимый байт, как вы показали ... хотя array[3]
- это не просто знаковый бит, это самый значимый байт, который включает в себя знаковый бит (как бит 7), но остальные биты предназначены для величины.
Итак, в вашем случае младший байт равен 1, а следующий байт равен 64 - поэтомурезультат:
( 1 * (1 << 0) ) + // Bottom 8 bits
(64 * (1 << 8) ) + // Next 8 bits, i.e. multiply by 256
( 0 * (1 << 16)) + // Next 8 bits, i.e. multiply by 65,536
( 0 * (1 << 24)) // Top 7 bits and sign bit, multiply by 16,777,216
, что составляет 16385. Если бит знака был установлен, вам нужно будет рассмотреть два случая по-разному, но в этом случае все просто.