Невозможно получить отрицательное значение с плавающей запятой из HEX в C#

#c#

#c#

Вопрос:

Мне нужно прочитать некоторые шестнадцатеричные данные из файла. Это работает на C и Matlab, но не на C # (который я использую).

Одни данные состоят из 4 байт, например: d0bd a7fa

В C / Matlab я могу получить правильное значение: -1.3362

Но в C # я получаю это: 62.663810729980469

Вот код C #, который я использую :

 int exp = 6;
b.BaseStream.Seek(pos, SeekOrigin.Begin);
uint getValAbs = b.ReadUInt32();
(the below formula comes from the file format)
float actualValue = (float)(getValAbs * (Math.Pow(2, exp - 32)));
actualValue = 62.663810729980469;
 

а в matlab его

 Spec(:,isub)    = fread(fid,fnpts,'long') * pow2(subfexp-32);
 

и это дает мне правильное значение…

Есть идеи?

Ответ №1:

Ошибка здесь:

 b.ReadUInt32();
 

Они используют 'long' то, что подписано, поэтому

 b.ReadInt32();
 

Комментарии:

1. ну … как всегда, я думал, что ответ был намного сложнее … большое вам спасибо, даже если я сейчас чувствую себя довольно глупо, ха-ха

2. @ZephCraw Если вы перечитали свою проблему, было легко увидеть: у вас было отрицательное число -1.3362 , но вы умножили два положительных числа: UInt32 и Math.Pow(2, something) . Здесь есть проблема 🙂