Læse / Skrive / Konvertere Syncsafe Integers
<OT-Udbrud> HADER DIG EKSPERTEN </OT-Udbrud>Ja overstående kan virke skræmmende og useriøs... men havde lige skrevet spørgsmålet ned meget specifikt... og det mente eksperten så ikke var helt godt nok og nu er det så VÆK!...
Så nu kommer der altså en kort version istedet...
--------------------------------------------------------------------
Emnet er nok beskrivende nok i sig selv... Hvis man altså ved hvad en Syncsafe integer er...
Ellers kan det lige kort forklares som en int, i dette tilfælde 32 bit, som holder den højreste bit i alle byte 0, hvilket vil sige at der kun er 28 efektive bit.
fx tallet 1.023 som har den binære representation af:
0000 0000 . 0000 0000 . 0000 0011 . 1111 1111
lagres som 1.919:
0000 0000 . 0000 0000 . 0000 0111 . 0111 1111
------------------------------------------------------------------
Læsning:
Havde tænkt mig at bruge shift operatorene, dette gør jeg ved at læse de 4 bytes der udgør den, og så konverete dem enkeltvis til integers og shifte dem så meget som det nu hver i sær skal og til sidst lægge dem sammen...
Tager vi igen 1.023 (1.919)
0000 0000 . 0000 0000 . 0000 0111 . 0111 1111
representation af integers efter indlæsning af bytes:
a= int for byte 1: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0000 (0)
b= int for byte 2: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0000 (0)
c= int for byte 3: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0111 (7)
d= int for byte 4: 0000 0000 . 0000 0000 . 0000 0000 . 0111 1111 (127)
a << 21; b << 14; c << 7; d << 0;
representation af integers efter shift operation:
a= int for byte 1: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0000 (0)
b= int for byte 2: 0000 0000 . 0000 0000 . 0000 0000 . 0000 0000 (0)
c= int for byte 3: 0000 0000 . 0000 0000 . 0000 0011 . 1000 0000 (896)
d= int for byte 4: 0000 0000 . 0000 0000 . 0000 0000 . 0111 1111 (127)
r= summen af alle: 0000 0000 . 0000 0000 . 0000 0011 . 1111 1111 (1.023)
Hvilket vel alt i alt er godt nok?... men er der bedre / mere effektive måder, Pt kigger jeg ikke på hvordan bytesne er lagret (big eller smal indian)...
skal naturligvis lige med på en eller anden måde.
------------------------------------------------------------------
Skrivning:
Skrivningen af den havde jeg tænkt mig at prøve at gå baglæns i forhold til det overstående ved brug af % og /
Altså (X % 127) må give de 7 sidste bit, (X / 127) må fjerne de sidste 7 bit... i og med det er heltals division...
Er den god nok. og igen, er der andre / bedre måder at håntere det på?...
