Согласно Статья Джона Скита о поплавках, установка знакового бита в 1, а все остальное в 0 все равно дает число 0. Я не уверен на 100%, является ли знаковый бит самым первым битом (как сказано в статье) или самым последним битом ( как описано в документы). Несмотря на это, я пробовал оба:
byte[] buf = new byte[4];
buf[0] = 0b10000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000000;
float f = BitConverter.ToSingle(buf, 0); // 1,793662E-43
buf[0] = 0b00000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000001;
float g = BitConverter.ToSingle(buf, 0); // 2,350989E-38
И оба не дают 0. Что я не так делаю? Проверка корректности установки всех битов в 0 работает.
Спасибо. Это важный намек.
Тем не менее, документы .NET говорят мне о неправильном порядке битов ?! Я прав?
Благодаря пользователю EOF я понял, что байты .NET не хранятся в (для небитовых хакеров) интуитивно понятном порядке байтов. buf[3] = 0b10000000;
делает свое дело.
Только по прошествии двух дней :)
! снова поражает Endianness