endianness - Endianness


z Wikipedie, otevřené encyklopedie

Endianness odkazuje na pořadí, ve kterém bajty jsou uspořádány do větších číselných hodnot, pokud jsou uloženy v paměti , nebo když přenášeny digitální spoje. Endianness je zájem o počítačové vědy , protože dvě rozporu, a neslučitelné formáty jsou v běžném používání: Slova mohou být zastoupeny ve velkém-endian nebo little-endian formátu, v závislosti na tom, zda bitů nebo bajtů nebo jiné složky jsou řazeny od velkého konce ( nejvýznamnější bit ) nebo malý konec ( nejméně významný bit ).

Ve formátu big-endian, kdykoli adresování paměti nebo vysílající / ukládání slov bytewise, nejvýznamnější bajt byte obsahuje nejvýznamnější bit -je uložen první (má nejnižší adresu) nebo zaslány první, pak tyto byty jsou uložit nebo odeslat v sestupném pořadí významnosti, přičemž nejméně významný bajt je ten, který obsahuje nejméně významný bit -stored poslední (který má nejvyšší adresy) nebo zaslat poslední.

Little-endian formátu obrátí toto pořadí: posloupnost adres / odesílá / První ukládá nejméně významný bajt (nejnižší adresou) a nejvýznamnější bajt poslední (nejvyšší adresa). Většina počítačových systémů preferují jeden formát pro všechna data; nativním formátu systému je automatické. Ale při čtení paměti nebo přijímání přenášených dat z jiného počítačového systému, to je často nutné zpracovat a převést data mezi preferované nativního formátu endianness k opačnému formátu.

Pořadí bitů v bajtu nebo slovo může mít také endianness (jak je popsáno dále); nicméně, byte je obvykle zpracován jako jediný číselná hodnota nebo symbol, znak a tak bitová sekvence, aby se zabrání.

Obě velké a malé formy endianness jsou široce používány v digitální elektroniky. Volba endianness k novému designu je často arbitrární, ale později technologie revize a aktualizace udržovat stávající endianness a mnoho dalších designových atributů k udržení zpětné kompatibility . Jako příklady jsou IBM z / Architecture sálové počítače a řady Motorola 68000 použít big-endian, zatímco Intel x86 procesory používají trochu endian. Konstruktéři System / 360 , předchůdce z / Architecture, vybral jeho endianness v roce 1960; návrháři Motorola 68000 a Intel 8086 , první členové 68000 a x86 rodin, si vybral svou endianness v roce 1970.

Big-endian je nejběžnější formát v datové sítě; polí v protokolů sady protokolů Internetu , jako je IPv4 , IPv6 , TCP a UDP , jsou přenášeny v big-endian pořadí. Z tohoto důvodu, big-endian pořadí bajtů je také označována jako síť pořadí bajtů . Little-endian skladování je populární pro mikroprocesory, z části kvůli významný vliv na mikroprocesoru návrhy ze strany společnosti Intel Corporation. Existují také smíšené formy; Například v VAX plovoucí desetinnou čárkou, je pořadí bytů v 16-bitového slova se liší od uspořádání 16bitových slov ve 32-bitového slova. Tyto případy se někdy označují jako smíšené endian nebo střední-endian . Tam jsou také některé bi-endian procesory, které pracují buď v malém-endian nebo v režimu big-endian.

Ilustrace

Big-Endian
Malý Endian

Následující dvě popisná ilustrace předpokládají normální čtení a psaní konvenci zleva doprava , kde je nejvíce vlevo číslice nebo znak proto odpovídá údajům, že „poslal“ (nebo „obdržel“) jako první, nebo být v nejnižším adresy v paměti, a nejvíce vpravo číslice nebo znak odpovídá data odesílaná nebo naposledy přijali, nebo jsou v nejvyšší adresy v paměti.

Big-endianness může být prokázáno tím, že píše desetinné číslo, řekněme sto dvacet tři, na papíře v obvyklém polohový zápis srozumitelný numerate čtenáře: 123 . Číslice jsou psány od vlevo a vpravo, přičemž nejvýznamnější číslici 1 , psaný jako první. Toto je analogické s nejnižší adresu paměti se používá jako první. Toto je příklad z big-endian úmluvy převzaté z každodenního života.

Málo endian způsob psaní stejného počtu, sto dvacet tři, by umístil stovkách-číslice 1 v pravým okrajem: 321 . Osoba po konvenční big-endian, aby místo hodnotou, kdo si není vědoma tohoto speciálního uspořádání, by četl jiné číslo: tři sta dvacet jedna. Endianness v práci na počítači je podobný, ale obvykle se vztahuje na uspořádání bytů, spíše než číslic.

Obrázky vpravo, kde je adresa paměti, ukazují velký-endian a little-endian ukládání do paměti.

Etymologie

Danny Cohen představil požadavky Málo Endian a Big-Endian pro řazení bytů v článku z roku 1980. V této technické a politické zkoumání problematiky byte objednávání, dále jen „endian“ jména byly čerpány z Jonathan Swift 1726 satira je Gulliver cesty , v němž občanská válka vypukne nad tím, zda velký konec nebo malý konec vařeným vejcem je správný konec bezva otevřený, který je analogický k počítání od konce, který obsahuje nejvýznamnější bit nebo nejméně významný bit.

Hardware

Paměť počítače se skládá ze sledu úložných buněk. Každá buňka je identifikována v oblasti hardware a software, jeho adresa paměti . V případě, že celkový počet paměťových buněk v paměti je N , pak adresy jsou vyjmenovány od 0 do n-1 . Počítačové programy často používají datové struktury oborů , které se mohou skládat z více dat, než je uložen v jedné paměťové buňky. Pro účely tohoto článku, kde jeho použití jako operand instrukce je relevantní, pole se skládá z po sobě jdoucích sekvence bytů a představuje jednoduchý hodnotu dat. Kromě toho, že musí být z číselného typu v některých polohové číselné soustavy (většinou základ-10 nebo báze-2 - nebo báze-256 v případě 8-bitového bajtů). V takovém číselného systému je „hodnota“ číslice dána nejen jeho hodnotu jako jediné číslice, ale také postavení, které zaujímá v úplném počtu, jeho „významu“. Tyto pozice mohou být mapovány do paměti především dvěma způsoby:

  • zvýšení numerické význam s rostoucí adresy paměti (nebo zvýšení času), známý jako malý-endian , a
  • klesající číselnou význam s rostoucí adresy paměti (nebo zvýšení času), známý jako big-endian

Dějiny

Zatímco little-endian Intel mikroprocesor produktová řada se stala lidová architektura, mnoho historických a existující procesory používají velký-endian paměti reprezentaci, se běžně označuje jako síťové pořadí , jak je používán v soupravě internetového protokolu , a to buď výlučně nebo jako možnost designu; jiní používají ještě další program nazvaný " middle-endian ", "mixed-endian" nebo " PDP-11 -endian".

IBM System / 360 využívá velký-endian pořadí bytů, stejně jako jeho nástupci System / 370 , ESA / 390 , a z / Architecture . PDP-10 také používá big-endian adresování pokyny byte-orientovaný. IBM Series / 1 minipočítač rovněž použít big-endian pořadí bytů.

Nakládání s daty z různých endianness se někdy nazývá problém NUXI . Tato terminologie se zmiňuje o konfliktech byte pořadí zjistil při přizpůsobování UNIX , který běžel na smíšené-endian PDP-11, do / 1 počítače big-endian IBM Series. Unix byl jedním z prvních systémů, aby stejný kód se sestavují pro platformy s různými vnitřními reprezentací. Jeden z prvních programů převedeny měla vytisknout Unix , ale na Series / 1 je vytištěn nUxi místo.

Datapoint 2200 používá jednoduchý bitový sériový logiku s malým-endian s cílem usnadnit šíření carry . Když Intel vyvinula 8008 mikroprocesor pro DATAPOINT, které používají malý-endian pro kompatibilitu. Nicméně, jak Intel byl schopen dodat 8008 v době, Datapoint používá integrační střední velikosti ekvivalentu, ale málo endianness byl zachován ve většině provedeních Intel. Intel MCS-48 je také malý-endian, stejně jako známý DEC Alpha , Atmel AVR , VAX a mnoho dalších.

Motorola je 6800 /6801 je 6809 a 68000 řada procesorů použil formátu big-endian, a z tohoto důvodu, to je také známé jako „ Motorola konvence “.

Intel 8051 , na rozdíl od jiných procesorů Intel očekává, že 16bitové adresy pro LJMP a LCALL v big-endian formátu; Nicméně, Xcall instrukce uložit návratovou adresu do zásobníku v little-endian formátu.

SPARC historicky používá big-endian do verze 9, který je bi-endian ; Podobně brzy procesory IBM POWER byli big-endian, ale nyní PowerPC a Power Architektura potomci jsou bi-endian. ARM architektury byl malý-endian než verze 3, kdy se stal bi-endian .

Jiné známé malé endian architektury procesorů zahrnují MOS Technology 6502 (včetně Western Design Center 65802 a 65C816 ), Zilog Z80 (včetně Z180 a eZ80 ) a Altera Nios II .

Současné architektury

Intel x86 a také AMD64 / x86-64 řada procesorů používat little-endian formátu, a z tohoto důvodu je také známý v průmyslu jako „ Intel konvence “.

Některé současné big-endian architektury patří IBM z / Architecture , Freescale ColdFire (což je Motorola 68000 série založené), Xilinx MicroBlaze , Atmel AVR32 .

V důsledku své původní implementaci na platformě Intel 8080, operační systém nezávislý na FAT souborový systém je definován pouze malý-endian, a to i na platformách s využitím dalších endiannesses nativně.

Bi-endianness

Některé architektury (včetně ARM verze 3 a vyšší, PowerPC , Alpha , SPARC V9, MIPS , PA-RISC , SuperH SH-4 a IA-64 ) mají nastavení, které umožňuje přepínatelné endianness v dat stahuje a ukládá, instrukce vyzvedne, nebo oba. Tato funkce může zlepšit výkon či zjednodušit logiku síťových zařízení a software. Slovo bi-endian , když řekl hardware, označuje schopnost zařízení pro výpočet a předávání dat v obou endian formátu.

Mnohé z těchto architektur lze přepnout pomocí softwaru na výchozí určitém formátu endian (obvykle provádí při spuštění počítače); Nicméně, v některých systémech je výchozí endianness je zvolen hardware na základní desce a nelze měnit pomocí softwaru (například Alpha, který běží pouze v big-endian režimu na Cray T3E ).

Všimněte si, že výraz „bi-endian“ se vztahuje zejména na tom, jak zachází s procesorem dat přistupuje. Pokyn přistupuje (stáhne z instrukčních slov) na daném procesoru mohou stále předpokládat fixní endianness, i když datové přístupy jsou plně bi-endian, ačkoli toto není vždy případ, například na Intel IA-64 na bázi Itanium procesor, který má umožňuje obojí.

Všimněte si také, že některé nominálně bi-endian CPU vyžadují základní desky a které pomohou při plném přepnout endianness. Například, 32-bitové desktop orientované PowerPC procesory v little-endian režimu působí jako malý-endian z pohledu vykonávajícího programy, ale vyžadují základní desky provést 64bitové odkládací oddíly na všech 8 bytových tras do zajistilo, že málo endian pohled na věci, se bude vztahovat na I / o zařízení. Při absenci tohoto neobvyklého desky hardware, software Ovladač zařízení musí zapsat na různé adresy vrátit neúplné transformaci a také musí provést normální byte swapu.

Některé procesory, jako například mnoho PowerPC procesory jsou určeny pro embedded použití a téměř všechny procesory SPARC, aby pro každé straně výběr endianness.

procesory SPARC od pozdní 1990 ( „sparc v9“ kompatibilní procesory) umožňují údaje endianness být vybrán s jednotlivými instrukcí, který načte z nebo ukládá do paměti.

Mnoho procesory mají instrukce, jak převést slovo do rejstříku na protější endianness, to znamená, že prohodit pořadí bytů v 16-, 32- nebo 64-bitového slova. Všechny jednotlivé bity nejsou obrácené ačkoli.

Nedávný Intel x86 a x86-64 architektura procesorů mají MOVBE instrukce ( Intel Core od 4. generace, po Atom ), který stáhne velký-endian formátu slovo z paměti nebo napíše slovo do paměti ve formátu big-endian. Tyto procesory jsou jinak pečlivě little-endian. Také už řadu výměnných instrukcí zvrátit pořadí bytů obsahu registrů, jako když slova již stažen z paměťových míst, kde byly ve ‚špatném‘ endianness.

ZFS / OpenZFS kombinovaný systém souborů a logické manažer svazku je známo, že adaptivní endianness a pracovat s oběma velkými-endian a little-endian systémech.

Plovoucí bod

Ačkoli všudypřítomné x86 procesory dnes používají little-endian úložiště pro všechny typy dat (integer, plovoucí čárkou, BCD ), existuje celá řada hardwarových architektur, kde s plovoucí desetinnou čárkou jsou čísla zastoupena ve velkém-endian formě, zatímco celá čísla jsou zastoupeny little-endian forma. Existuje ARM procesory, které mají poloviční trochu endian, polovina big-endian reprezentace s plovoucí desetinnou čárkou za dvojitou přesností čísla: oba 32-bitová slova jsou uloženy v malém-endian jako celočíselných registrů, ale nejvýznamnější jeden první. Protože tam bylo mnoho formátů s plovoucí desetinnou čárkou bez „ sítě “ standardní reprezentaci pro ně je XDR standard používá big-endian IEEE 754 jako jeho zastoupení. Může se tedy zdát podivné, že rozšířené IEEE 754 standardu plovoucí desetinnou čárkou neurčuje endianness. Teoreticky to znamená, že i standardní údaje s plovoucí desetinnou čárkou IEEE viz jednom stroji nemusí být čitelné jiný. Nicméně, na moderních standardních počítačů (tj prováděcích IEEE 754), jeden může být v praxi bezpečně předpokládat, že endianness je stejná pro plovoucí desetinnou čárkou čísla jsou pro celá čísla, takže konverze jednoduché bez ohledu na typ dat. (Small vestavěných systémů pomocí speciálních formátů s plovoucí desetinnou čárkou, může být další záležitost nicméně.)

Optimalizace

Malý-endian systém má tu vlastnost, že stejná hodnota může být čtena z paměti při různých délkách bez použití různých adres (i když vyrovnávací jsou uložena omezení). Například, 32-bitové paměťové místo s obsahem 4A 00 00 00 lze odečíst na stejné adrese buď jako 8-bitový (hodnota = 4A), 16-bit (004A), 24-bit (00004A), nebo 32- bit (0000004A), z nichž všechny zachovávají stejnou číselnou hodnotu. I když tento malý-endian nemovitost se používá jen zřídka přímo programátory na vysoké úrovni, to je často zaměstnán kódovými optimalizaci, jakož i sestavení jazyka programátory. Ve více Konkrétně takové optimalizace jsou ekvivalentem následující kód C vracející se platí na většině little-endian systémech:

union u_t {
  uint8_t u8; uint16_t u16; uint32_t u32; uint64_t u64;
} u = { .u64 = 0x4A };
puts(u.u8 == u.u16 && u.u8 == u.u32 && u.u8 == u.u64 ? "true" : "false");

I když to není povoleno C ++, jako je typ pěchování kód je povolena „provedení definované“ v normě C11 a běžně používané v kódu interakci s hardwarem.

Na druhé straně, v některých situacích může být vhodné získat aproximaci vícebajtové nebo víceslovného hodnotu čtením pouze jeho nejvýznamnější část namísto kompletního zastoupení; velký-endian procesoru může takové sbližování číst s použitím stejné base-adresu, která bude použita pro plnou hodnotu.

Výpočet pořadí

Malý-endian zastoupení zjednodušuje hardware, v procesorech, které přidávají vícebajtové celočíselné hodnoty byte v době, jako je malé byte adresovatelný procesory a mikrokontroléry . Jako rozmnožovací přenášení musí začít nejméně významný bit (a tedy byte), přídavek vícebytová pak může být provedena s monotónně-incrementing adresy sekvence, jednoduché operace již v hardwaru. Na big-endian procesoru, jeho řešení jednotka musí být řečeno, jak velký přídavek bude, aby mohl naskočit těšit na nejméně významného bajtu, pak počítat zpět dolů směrem k nejvýznamnějším bytem (MSB). Na druhou stranu, aritmetika dělení se provádí počínaje MSB, takže je přirozené, že big-endian procesorů. Nicméně, vysoce výkonné procesory obvykle načíst typické multi-byte operandů z paměti ve stejném množství času, který by přinesl jeden byte, takže složitost hardwaru není ovlivněna bytového uspořádání.

Mapování vícebajtové binární hodnoty do paměti

Big-Endian Malý Endian
Typu C název počáteční hodnota Paměť na posunu Paměť na posunu
proměnné +0 1 +2 +3 +0 1 +2 +3
int32_t longVar = 0x0a0b0c0d; 0A h 0B h 0C h 0D h 0D h 0C h 0B h 0A h
int16_t shortVar = 0x0c0d; 0C h 0D h 0D h 0C h
Jednoduchý způsob, jak mít na paměti, „V L mrňavá Endian je L východ významný byte přejde do L dlužen adresou slot“.
Takže v tomto příkladu v tabulce, 0D h , nejméně významný bajt v Little-Endian systém přejde do slotu +0.

Můžeme předpokládat, že když jsme psát text zleva doprava , jsme zvyšuje ‚adresy‘ na papíře, protože procesor bude psát bajtů s rostoucí adresy paměti - stejně jako v přilehlé tabulce. Na papíře je hex hodnota 0a0b0c0d (psaný 168496141 obvyklým desítkové soustavě) je big-endian styl, protože píšeme nejvýznamnější číslice první a ostatní následují v de pomačkání význam. Mapování toto číslo jako binární hodnotu posloupnosti 4 bajty v paměti v big-endian stylu také píše bajtů z leva do prava v DE pomačkání význam: 0A h při +0, 0B h při +1 0C h při +2 , 0D h při +3.

Na malý-endian systému, byty jsou psány z zleva doprava ve městě pomačkání významu, počínaje něčí byte: 0D h při +0, 0C h při +1, 0B h při +2, 0A h na +3. Psaní 32bitový binární hodnotu do paměti na little-endian systému a výstup na umístění v paměti (s rostoucími adresy zleva doprava) ukazuje, že pořadí je obrácené (byte-vyměnit provozu), ve srovnání s obvyklým big-endian notace. To je Způsob, jakým hexdump se zobrazí: protože dumpingové program je schopen zjistit, jaký druh dat je dumping je pouze orientační, může pozorovat je monotónně rostoucí adresy. Lidský čtenář, nicméně, kdo ví, že jsou čtení hexdump o trochu endian systému, a kdo ví, jaký druh údajů, které právě čtete, přečte byte sekvence 0D h , 0C h , 0B h , 0A h jako 32- bitové binární hodnotu 168496141, nebo 0x0a0b0c0d v šestnáctkové soustavě. (Samozřejmě, že je to není stejný jako počet 0D0C0B0A h = 0x0d0c0b0a = 218893066.)

Příklady

Tato část obsahuje příklad rozvržení 32-bitové číslo 0A0B0C0D h v nejběžnějších variant endianness. Existuje několik digitálních procesorů, které používají jiné formáty. To platí pro typické vestavěných systémů , jakož i pro obecné počítačových procesorů. Většina procesorů používaných v rolích mimo CPU v typických počítačích (ve skladovacích jednotek, periferních zařízení apod) také použít jednu z těchto dvou základních formátech, ačkoli ne vždy 32bitové.

Příklady se vztahují k ukládání do paměti hodnoty. Používá hexadecimální notace.

Big-endian

Big-Endian.svg

Atomic velikost element 8-bit

Adresa přírůstek 1 bajt (oktet)
zvyšující adresy   →
... 0A h 0B h 0C h 0D h ...

Nejvýznamnější bajt hodnota (MSB), 0A H , je na nejnižší adresu. Ostatní byty následovat v sestupném pořadí podle důležitosti. To je podobné zleva doprava čtení v hexadecimálním pořadí.

Atomic velikost element 16-bit

zvyšující adresy   →
... 0A0B h 0C0D h ...

Nejvýznamnější atomové prvek uloží se hodnota 0A0B h , následně 0C0D hodin .

Malý Endian

Málo Endian.svg

Atomic velikost element 8-bit

Adresa přírůstek 1 bajt (oktet)
zvyšující adresy   →
... 0D h 0C h 0B h 0A h ...

Nejméně významný bajt (LSB) hodnota 0D h , je na nejnižší adrese. Ostatní byty následovat ve vzestupném pořadí významnosti. To je podobný zprava doleva čtení v hexadecimálním pořadí.

Atomic velikost element 16-bit

zvyšující adresy   →
... 0C0D h 0A0B h ...

Nejméně významný 16bitové jednotka ukládá hodnoty 0C0D h , okamžitě následovaný 0A0B hodin . Všimněte si, že 0C0D h a 0A0B h představují celá čísla, nikoli bitové rozvržení.

Když organizuje byte adresy

Byte adresy rostoucí zprava doleva

Vizualizace adresy paměti zleva doprava činí hodnoty málo endian objeví pozpátku. Pokud jsou adresy napsáno rostoucí směrem doleva místo toho bude každá jednotlivá little-endian hodnota objeví dopředu. Nicméně řetězce hodnot nebo znaky zobrazují obrácené místo.

S 8-bitových atomových prvků:

←   zvyšující adresy
... 0A h 0B h 0C h 0D h ...

Nejméně významný bajt (LSB) hodnota 0D h , je na nejnižší adrese. Ostatní byty následovat ve vzestupném pořadí významnosti.

S 16-bitovými atomových prvků:

←   zvyšující adresy
... 0A0B h 0C0D h ...

Nejméně významný 16bitové jednotka ukládá hodnoty 0C0D h , okamžitě následovaný 0A0B hodin .

Zobrazení textů je obráceno od normálního zobrazení jazyků, jako je angličtina, které čtou zleva doprava. Například, slovo „XRAY“ zobrazen tímto způsobem, přičemž každý znak uložen v 8-bitové atomové prvku:

←   zvyšující adresy
... "Y" "A" "R" "X" ...

Pokud dvojice znaky jsou uloženy v 16bitových atomových prvků (pomocí 8 bitů na znak), mohlo by to vypadat ještě podivnější:

←   zvyšující adresy
... "AY" "XR" ...

Tento konflikt mezi uspořádání paměťových binárních dat a textu, patří do povahy little-endian konvence, ale jedná se o konflikt pouze u jazyků psaných zleva doprava, jako je angličtina. Pro zprava doleva jazyků, jako je arabština a hebrejština , neexistuje žádný rozpor textu s binárními a přednostní zobrazení v obou případech by se adresy rostoucí doleva. (Na druhou stranu, zprava doleva jazyky mají komplementární vnitřní konflikt v big-endian systému.)

Middle-endian

Četné jiné orderings, obecně nazývané střední endian nebo smíšenou endian , jsou možné. Na PDP-11 (16 bitů malý-endian), například instrukce pro konverzi mezi hodnotami s plovoucí desetinnou čárkou a celočíselných ve volitelném s plovoucí desetinnou čárkou procesor na PDP-11/45 a PDP-11/70, a v některém z následujících procesorů, uloženy 32bitové „dvojitá přesnost celočíselné dlouhé“ hodnoty s 16-bitové polovin prohozené od očekávaného malý-endian pořadí, a UNIX C kompilátor použit stejný formát pro 32bitové dlouhé celá čísla. Toto uspořádání je znám jako PDP-endian .

  • skladování 32-bitového slova (hexadecimální 0A0B0C0D) na PDP-11
zvyšující adresy   →
... 0B h 0A h 0D h 0C h ...

ARM architektuře může také produkovat tento formát při psaní 32-bitové slovo na adresu 2 bajty z 32bitové slovní vyrovnání .

Segmentové deskriptory na Intel 80386 a kompatibilními procesory udržet 32bitové základní adresu segmentu uloženého v little-endian pořadí, ale ve čtyřech nejdou bytech, v relativních polohách 2, 3, 4 a 7 startu deskriptoru.

Soubory a byte odkládací

Endianness je problém, když binární soubor vytvořený v počítači se čte v jiném počítači s jinou endianness. Některé CPU instrukční sady poskytuje nativní podporu pro endian bajt odkládání, jako bswap ( x86 - 486 a novější) a rev ( ARMv6 a novější).

Některé kompilátory mají zabudované zařízení k řešení údajů uvedených v jiných formátech. Například Intel Fortran kompilátor podporuje nestandardní CONVERTspecifikátor, takže soubor může být otevřen

OPEN(unit,CONVERT='BIG_ENDIAN',...)

nebo

OPEN(unit,CONVERT='LITTLE_ENDIAN',...)

Některé kompilátory mají možnosti, jak generovat kód, který po celém světě umožňuje konverzi pro všechny souborové operace IO. To umožňuje programátorům, aby znovu použít kód v systému s opačným endianness aniž by bylo nutné upravit kód sám. V případě, že kompilátor nepodporuje takový převod, programátor potřebuje vyměnit bajtů přes ad hoc kód.

Fortran sekvenční neformátovaný soubory vytvořené s jedním endianness obvykle nelze číst na systému pomocí druhého endianness protože Fortran obvykle implementuje záznam (definovaný jako dat zapsaných jediným Fortran prohlášení) podle údajů předcházel a uspěl počtu polí, která jsou celá čísla, stejná k počtu bytů v datech. Pokus o čtení takového souboru na systému druhé endianness pak vede k chybě při běhu, protože počítat pole jsou nesprávné. Tomuto problému se lze vyhnout tím, že píše se sekvenční binární soubory, na rozdíl od sekvenční neformátovaný.

Unicode text může volitelně začínat značka pořadí bajtů (BOM) pro signalizaci endianness souboru nebo proudu. Jeho bod kódu je U + FEFF. V UTF-32 pro Například, big-endian souborů by měla začínat 00 00 FE FF; málo endian by měla začínat FF FE 00 00.

Aplikační binární formáty dat, jako je například MATLAB .mat soubory nebo datový formát .BIL, který se používá v topografii, jsou obvykle endianness nezávislé. Toho je dosaženo:

  1. ukládání dat vždy v jedné pevné endianness, nebo
  2. nesoucí s údaji přechod k označení, které endianness data byla napsána s.

Při čtení souboru, aplikace převede endianness, neviditelně od uživatele. Příkladem prvního případu je binární XLS soubor formátu, který je přenositelný mezi Windows a systémy Mac a vždy trochu endian, takže aplikace Mac si vyměnili své byty na zatížení a ušetřit při jízdě na big-endian Motorola 68K nebo PowerPC procesor.

TIFF obrazové soubory jsou příkladem druhé strategie, jehož hlavička žádost o endianness svých interních binárních čísel. Je-li soubor začíná podpisem „ MM“ To znamená, že celá čísla jsou reprezentovány jako big-endian, zatímco „ II“ znamená malý-endian. Tyto podpisy potřebují jednotnou 16-bitové slovo každý, a oni jsou palindromes (to znamená, že číst tytéž dopředu a dozadu), takže jsou endianness nezávislé. „ I“ Je zkratka pro Intel a „ M“ znamená Motorola , příslušné CPU poskytovatelů na IBM PC kompatibilní (Intel) a Apple Macintosh platformy (Motorola) v roce 1980. Intel CPU jsou little-endian, zatímco Motorola 680x0 procesory jsou big-endian. Tento explicitní podpis umožňuje TIFF čtenář program, vyměnit bajtů v případě potřeby, kdy daný soubor byl generován TIFF spisovatele program běžící na počítači s jinou endianness.

Vzhledem k tomu zapotřebí byte odkládací závisí na velikosti čísla uložená v souboru (dvě 2-byte celá vyžadují jiný odkládací než jedné 4bajtové celé číslo), musí být formát souboru známý provést převod endianness.

/* C function to change endianness for byte swap in an unsigned 32-bit integer */

uint32_t ChangeEndianness(uint32_t value)
{
    uint32_t result = 0;
    result |= (value & 0x000000FF) << 24;
    result |= (value & 0x0000FF00) << 8;
    result |= (value & 0x00FF0000) >> 8;
    result |= (value & 0xFF000000) >> 24;
    return result;
}

Networking

Mnoho IETF RFC používat termín pořadí sítě , což znamená, že pořadí přenosu pro bity a bajty přes drát v síťových protokolů . Mimo jiné historický RFC 1700 (také známý jako Internet standardní STD 2) definoval pořadí sítě protokoly v soupravě internetového protokolu být big-endian , a proto je použití termínu „sítě pořadí bajtů“ pro big-endian bajt objednat; Nicméně, ne všechny protokoly použít big-endian pořadí bajtů jako řádu sítě.

Berkeley zásuvky API definuje sadu funkcí pro konverzi 16-bitové a 32-bit celé číslo do a ze sítě byte pořadí: htons (host-to-network-krátký) a htonl (host-to-network-dlouhá) funkce převést 16-bit a 32-bitové hodnoty, respektive od stroje ( hostitelské ) na síťové pořadí; že ntohs a ntohl funkce převést ze sítě hostit pořadí. Tyto funkce mohou být no-op na big-endian systému.

V CANopen parametry multi-byte jsou vždy odesílány nejméně významný bajt prvního (little endian). To samé platí i pro Ethernet Powerlink .

Zatímco síťových protokolů na vysoké úrovni obvykle zvažují byte (většinou myšleno jako oktet ) jako jejich atomové jednotce nejnižší síťové protokoly mohou vypořádat s uspořádáním bitů uvnitř bajtu.

bit endianness

Bitové číslování je koncept podobný endianness, ale na úrovni bitů, nikoliv bytů. Bit endianness nebo bit-level endianness označuje přenosové pořadí bitů přes sériovou média. Analogový bit-level malý-endian (nejméně významný bit jde první) se používá RS-232 , HDLC , Ethernet a USB . Některé protokoly používají opačné pořadí (např Teletext , I²C , SMBus , PMBus a SONET a SDH ). Obvykle existuje konzistentní pohled na kousky bez ohledu na jejich pořadí v byte, takže druhý stává relevantní pouze na velmi nízké úrovni. Jedna výjimka je způsobena funkce nějaké cyklické redundance kontroluje odhalit všechny shlukové chyby až známou délku, která by byla v případě, že hýčkáni bit pořadí se liší od pořadí byte na sériový přenos.

Na rozdíl od serializaci termíny bit endianness a bit-level endianness používají jen zřídka, jako počítačové architektury, kde každý jednotlivý bit má jedinečnou adresu, jsou vzácné. Jednotlivé kousky nebo bit pole jsou přístupné pomocí jejich číselné hodnoty nebo, v programovacích jazycích vysoké úrovně, přiřazených jmen, jejichž účinky, které však mohou být závislé na stroj nebo chybí přenositelnost softwaru . Přirozený číslování je, že aritmetická vlevo posun 1 << n dává masku pro bit polohy n , pravidlo, které vykazuje (bajt) endianness stroje alespoň pokud n ≥ 8, například pokud se používá pro indexování dostatečně velký bitové pole , Jiné číslování se vyskytují v různých dokumentacích.

Reference

Další čtení

externí odkazy

Tento článek vychází z materiálu odebraného z zdarma on-line slovník práce na počítači před 1. listopadem 2008 a začleněna v rámci „přelicencování“, pokud jde o GFDL , verze 1.3 nebo novější.