Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Diskobolos 17. 12. 2014, 12:27:13
-
Uf, jsem nucen načítat data z binárních souborů vytvořených ze staré aplikace pro MS DOS/WIN 3.11. Jedna z položek věty je reálné číslo. Kdyby vše bylo v prostředí 32/64 bit, mohu se řídit dle normy IEEE754 (online http://www.binaryconvert.com/result_float.html) a číslo si "zrekonstruuji". Abych to zkrátil - z binárních souborů dokážu vyčíst mantisu, ale nikde nemůžu najít exponent. Jen tak pro zajímavost, uvedu prvních 8 bytů, u terých vím, že se v nich skrývá hodnota (díky tomu ani nemůžu s jistotou říct, že je to float nebo double):
86 00 00 00 00 48 00 00 ... reálné číslo 50
86 CD CC CC CC 44 00 00 ... 49.20
83 48 E1 7A 14 46 00 00 ... 6.19
Kdyby v tom někdo viděl logiku, ať se podělí. Díky.
-
Známe - šestibajtový real ze starého dobrého TurboPascalu a odvozenin?
double real48ToDouble(uint8_t realValue[6])
{
double exponent;
double mantissa;
int byte;
if (realValue[0]==0)
return 0.0; /* Null exponent=0 */
exponent=realValue[0]-129.0;
mantissa=0.0;
for (byte=1; byte<=4; byte++) {
mantissa+=realValue[byte];
mantissa*=0.00390625; /* mantissa/=256 */
}
mantissa+=(realValue[5] & 0x7F);
mantissa*=0.0078125; /* mantissa/=128 */
mantissa+=1.0;
if (realValue[5] & 0x80) /* Sign bit check */
mantissa=-mantissa;
return mantissa*pow(2.0, exponent);
}
-
Jako další varianta se nabízí speciální Microsoft formát, používaný starými BASICy:
http://en.wikipedia.org/wiki/Microsoft_Binary_Format
Ověřovat, jestli je to opravdu ono, se mi ale fakt nechce...
-
Známe - šestibajtový real ze starého dobrého TurboPascalu a odvozenin?
Bingo! To je ono. Díky moc!