Autor Zpráva
Darker
Profil
Rozebírám soubor a mělo by v něm být spousta adres sektorú. Jsou ve formátu čísla se znaménkem.
Pokud jsem princip dobře pochopil, FF FF FF by mělo být -1 a 00 00 00 by mělo být prostě 0. Jak mám správně převést ostatní čísla?

for($i=0;$i<count($MSAT);$i++){
 $integer=$MSAT[$i];
 $MSAT[$i]=4294967294-hexdec(big_endian($integer));
}

Tohle nefungovalo.
Z 00 00 01 55 pak vznikne 4294966953.
Z FF FF FF FF ale vznikne -1 jak má.
Keeehi
Profil
A spočítat to "ručně"?
TomášK
Profil
Pro uložení záporných čísel se zpravidla používá dvojkový doplněk. Ze způsobu, jakým se tvoří, určitě půjde vykoukat způsob, jak ho přečíst. Minimálně je to návod, jak poznat, jestli je číslo kladné nebo záporné.
Darker
Profil
Dík, Tomáši, to je přesně ono.
Výsledná funkce je:
function hex2dec($hex){
 $integer=big_endian($hex);
 $zaklad=pow(16,strlen($hex));
 $return= (int)hexdec($integer[0])>7?-1*($zaklad-hexdec($integer)):hexdec($integer);
 return $return;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0