#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)
. Здесь есть проблема 🙂