[Alg] Endianness

Pagina: 1
Acties:

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Topicstarter
Goed, na een vreemde off-topic discussie met OiSyN over endianness, waar we nog steeds niet uit zijn, wil ik ff een topic maken hierover. Leest makkelijker enzo.

Goed, wat ik dus weet is dit:

Big-endian is dat je begint met de byte met de laagste waarde, en eindigt met de byte met de hoogste waarde. 12 34 56 78 wordt dus 0x78563412.
Little-endian is dat je begint met de byte met de hoogste waarde, en eindigt met de byte met de laagste waarde. Dus gewoon zoals je getallen leest. 12 34 56 78 wordt 0x12345678.

Discussie voortzetten aub, want ik wil nu wel ff weten hoe het zit...

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Verwijderd

little endian is idd dat de byte met laagste waarde eerst komt, dus een unsigned short (2 byte) met een waarde van 1 zou worden: 0x01, 0x00. In big endian machines wordt dat 0x00, 0x01 (wat ik persoonlijk weer logischer vind, maar ik ben geen systeem-developer ;))

simpele code om uit te zoeken of een machine big/little endian is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function()
{
  unsigned short nummer = 1;
  unsigned char *letters = &nummer;

  if (letters[0] == 0x01 && letters[1] = 0x00)
  {
    // little endian
  }
  else if (letters[1] == 0x01 && letters[0] == 0x00)
  {
    // big endian
  }
  else
  {
    // panic
  }
}

Veel meer dan dit valt er niet over te zeggen. Dit is in 99% van de gevallen namelijk compleet irrelevant omdat de taal waarin jij programmeert dit voor jou allemaal moet goedzetten in het systeem. De enige keer wanneer dit uitmaakt is met externe binarire communicatie, dus een binaire file inlezen of binaire data uitlezen uit een netwerk.

Specifieke zeg ik binair omdat als je 14 als string (bv. ascii) verstuurt, dat de volgorde dan duidelijk is. Eerst komt de character 1, dan de character 4. In binaire vorm 14 versturen (0x00, 0x00, 0x00, 0x0e als het een unsigned integer is) is wel gevoelig voor endianness. Maar dat geldt dus alleen voor binaire data (denk aan audio/video bestanden, bv. AVI of WAV)...