hex offset na 512 bytes. how to?

Status
Niet open voor verdere reacties.

gertjuhhh1993

Gebruiker
Lid geworden
21 jun 2010
Berichten
127
Dag mensen,

ik heb een hexstring van 3000+ bytes. in deze string word meerdere malen een "offset" gebruikt. dit is een verwijzing naar een eerdere plek in de string waar de zelfde data word weergegeven.

C0 0C verwijst naar de twaalfde byte vanaf het begin.

zolang de eerste byte C0 blijft gaat het goed, maar zodra die hoger word klopt het tellen niet meer.
vb:
C1 F0 = (1 x 512) + 240 = 752

in de 752ste byte zou dus de benodigde data moeten beginnen volgens mij. maar dat klopt niet...

ik kon vrij weinig info vinden over de offset, maar wat hierboven over de offset staat is gebaseerd op: Link
en ook een klein voorbeeldje van een nameserver response waar ook de offset gebruikt word: Link


De vraag:
Hoe werkt de offset na 512 bytes als de eerste byte van de offset hoger word?
 
Het was handig geweest als je even de taal en de manier van opslaan gegeven had :)

Zoals: in C# en de data is strings. Zoals ik aangaf in je vorigen post is van de hoogste byte alleen de laagste 6 bits een getal dat je moet gebruiken.

C1 = 11000001
hoogste 2 bits strippen: 000001
getal = 1

offset is 1x256 + 240 = 496

in een byte passen maar 256 combinaties, niet 512 :)
 
en ik kan dus niet hoger dan 255, omdat dan het hoogste met de C0 bereikt is.(C0 FF).
dan word C1(1x256) + byte 2

dus:
C9 9F == (9 x 256) + 159 == 2463

zo moet het dan?
 
Laatst bewerkt:
Correct. Als de data al in "BYTE"'s worden opgeslagen kun je dit zeer eenvoudig doen met:

BYTE1(C9) AND 3F. De uitkomst daarvan is altijd de laagste 6 bits. in dit geval "9".

De uitkomst is inderdaad correct: 9x256 + 159. Dit soort code is extreem efficient te doen in "C" en "C++" door middel van operators als ">>" "<<" "&" en "|"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan