Ik ben op het moment bezig met een scriptje wat binaire gegevens moet inlezen (MIX files uit de C&C spellen om precies te zijn).
De headers van deze bestandjes bevatten ID nummers, en dat zijn redelijk grote unsigned long's (little endian byte order).
Voor het inlezen van deze headers gebruik ik de unpack functie:
Maar zoals er op de manual pagina van unpack staat, slaat PHP zo'n unsigned long intern gewoon als een signed long op, waardoor mijn unsigned long er opeens als een negatief getal uit komt rollen
Ik vraag mij nu af of er een workaround is voor dit probleem (behalve dan het kiezen van een andere taal
), want ik heb er geen kunnen vinden. (Daarbij moet gezegd worden dat ik relatief onervaren ben met het jongleren met bits en bytes, maar daarom ben ik dan ook bezig met dit scriptje
)
De headers van deze bestandjes bevatten ID nummers, en dat zijn redelijk grote unsigned long's (little endian byte order).
Voor het inlezen van deze headers gebruik ik de unpack functie:
PHP:
1
2
3
4
5
6
| for ($i=0; $i<$this->fileheader['filecount']; $i++) array_push( $this->fileheader['index'], unpack("Vid/Voffset/Vsize", fread($fh, 12)) ); |
Maar zoals er op de manual pagina van unpack staat, slaat PHP zo'n unsigned long intern gewoon als een signed long op, waardoor mijn unsigned long er opeens als een negatief getal uit komt rollen

code:
1
2
3
4
5
6
7
8
9
10
11
| *snip* [0]=> array(3) { ["id"]=> int(-1978143457) ["offset"]=> int(3020246) ["size"]=> int(768) } *snip* |
Ik vraag mij nu af of er een workaround is voor dit probleem (behalve dan het kiezen van een andere taal