Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C] Endianness van binary bestand

Pagina: 1
Acties:

  • Wolfos
  • Registratie: Oktober 2010
  • Laatst online: 21-11 10:00
Ik schrijf integers weg naar een binary bestand met fwrite. Nou is X86 een little endian systeem, dus als ik het goed begrijp word een integer met de waarde 1 geschreven als '00 00 00 01'. Echter als ik mijn bestand open met een hex editor dan krijg ik juist het omgekeerde '01 00 00 00'.

Dit heb ik op zowel Linux als Windows getest, en op beiden is het hetzelfde. Voor de zekerheid wil ik mijn code CPU onafhankelijk maken maar dan wil ik wel weten of mijn observatie klopt en wat dit betekend voor het lezen van het bestand.

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Ezelsbrug:
Little Endian - Little End first. Dus wat je in je HEX editor ziet klopt precies; het 'little end' staat op een lager adres('wordt als eerst geschreven') dan het 'big end'.

  • Wolfos
  • Registratie: Oktober 2010
  • Laatst online: 21-11 10:00
Ok, fijn om te weten. Dan begrijp ik het dus niet helemaal goed.

Volgens Wiki word bij little endian de grootste byte (in dit geval dus 0x01) als laatste geplaatst, wat hier niet het geval lijkt te zijn.

In ieder geval bedankt.

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Niet grootste als in de hoogste waarde, maar het hoogste in significantie.

Bit 1 in byte 1 = 1, bit 1 in byte 2 = 256, bit 1 in byte 3 = 65536, enzovoort.

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

De grootste byte wordt wel degelijk als laatste geplaatst. Merk op dat het niet om de waarde van de byte gaat! De hoogste/grootste byte is bit 24-31 (bij een 4 byte getal/32 bits systeem), niet de byte met de hoogste waarde.

[ Voor 12% gewijzigd door EddoH op 03-03-2014 16:48 ]


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Wolfos schreef op maandag 03 maart 2014 @ 16:42:
Ok, fijn om te weten. Dan begrijp ik het dus niet helemaal goed.

Volgens Wiki word bij little endian de grootste byte (in dit geval dus 0x01) als laatste geplaatst, wat hier niet het geval lijkt te zijn.

In ieder geval bedankt.
Op welke wiki staat dat? De wikipedia heeft het niet over de "grootste", maar over de "belangrijkste" byte.

  • Wolfos
  • Registratie: Oktober 2010
  • Laatst online: 21-11 10:00
Ok, nu begin ik het te snappen. Ik zal er nog wel wat over lezen.

Bedankt iedereen.

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21-11 21:23

Matis

Rubber Rocket

Je kunt, als je endian-safe wilt zijn, je ook eens verdiepen in de host-to-network functies en vice versa. Deze zijn altijd big endian.

If money talks then I'm a mime
If time is money then I'm out of time

Pagina: 1