Endian
Endian beskriver hur byteordningen i ett digitalt heltal med flera bytes är upplagt. Det används vanligen i de två varianterna Big-Endian och Little-Endian. Ibland kallas de Motorola respektive Intel-ordning.
Big-Endian och Little-Endian
[redigera | redigera wikitext]Processorer från bland annat Motorola använder rak byteordning för heltal, vilket innebär att den högsta byte kommer först i minnet och den lägsta kommer sist. Detta kan likställas med ett decimalt system där hundratalen (mest signifikanta siffran) kommer först, sedan tiotal och sist ental (minst signifikanta siffran). Detta format kallas Big-Endian (big-endian). Talets slut (end) finns på höga (big) adresser. Begreppet kan förvirra, att man tror att bytes som ger högst värde i ett heltal (big) ligger sist, listas till höger, men så är det inte.
Intel använder omvänd byteordning, vilket innebär att den lägsta byten kommer först och den högsta byten kommer sist för heltal (som om vi skulle skriva ental först, följt av tiotal etc.). Detta kallas Little-Endian (little-endian). Alla typer av programkod som direkt skriver ett heltal (eller annan numerisk kod) över flera byte på nätverk eller som fil måste hantera byteordningsproblematiken, för att man skall kunna uppnå kompatibilitet mellan de två systemen. Det gäller även Unicode-formatet UTF-16 (men vanligen används på nätet UTF-8 som har väldefinierad byte-ordning). Microsoft Notepad kallar av historiska skäl formatet UTF-16LE för "Unicode", eftersom det är det Unicode-format som används internt på Windows-datorer. Normalt har filer (till exempel HTML) med UTF-16 ett särskilt "byte order mark" först, talet 0xFEFF som lagras som FE,FF i big-endian och FF,FE i little-endian.
Många binära protokoll på Internet använder Big-Endian, vilket därför ibland kallas "Network Byte Order" (främst på system som själva har omvänd byteordning). Microsoft Windows använder Little-Endian, medan Apple Macintosh använder Big-Endian. Linux, Android och alla Java-program kan använda vilket som internt (ofta enligt använd maskinvara). De system som stödjer både Big- och Little-endian benämns Bi-endian.
Etymologi
[redigera | redigera wikitext]Termen big-endian kommer ursprungligen från Jonathan Swifts satiriska roman Gullivers resor från 1726. Dataingenjören Danny Cohen införde det 1980 som ett begrepp inom datorvärlden.[1] I sin roman beskrev Swift spänningarna i de båda rikena Lilliput och Blefuscu; medan kungliga påbud i Lilliput krävde att man skulle knacka sitt (löskokta) ägg i den smalare änden, var invånarna i det rivaliserande kungadömet Blefuscu tillsagda att knacka sina ägg i den tjocka änden. Detta gav de senare deras benämning som Big-endians – "storändianer".[2]
Referenser
[redigera | redigera wikitext]- ^ Danny Cohen (1980-04-01), On Holy Wars and a Plea for Peace, arkiverad från ursprungsadressen den 2013-07-01, https://web.archive.org/web/20130701081245/http://www.ietf.org/rfc/ien/ien137.txt, läst 19 maj 2012, ”...which bit should travel first, the bit from the little end of the word, or the bit from the big end of the word? The followers of the former approach are called the Little-Endians, and the followers of the latter are called the Big-Endians.”
- ^ Jonathan Swift (1726). Gulliver's Travels. http://en.wikisource.org/wiki/Gulliver%27s_Travels/Part_I/Chapter_IV. Läst 19 maj 2012. ”Which two mighty powers have, as I was going to tell you, been engaged in a most obstinate war for six-and-thirty moons past. (...) the primitive way of breaking eggs, before we eat them, was upon the larger end; (...) the emperor his father published an edict, commanding all his subjects, upon great penalties, to break the smaller end of their eggs. (...) Many hundred large volumes have been published upon this controversy: but the books of the Big-endians have been long forbidden (...)”