Írásban kódot, függetlenül a byte sorrendben, c
bájtsorrend
Ez a kifejezés, hogy hogyan tárolja és használja byte rendszer: sorrendben a legrégebbi a legfiatalabb (felvétel kezdődik a legjelentősebb byte és végződik a legalacsonyabb, big endian), a sorrendet a legfiatalabb a legidősebb (adatrögzítés kezdődik a fiatalabb és az idősebb részek, little endian).
Tárolás bájtok a memóriában
1. táblázat Storage byte big-endian (Big-endian)
Megjegyzés az előző táblázat - számok fordított sorrendben. Emlékezve a sorrendben a következő hasznos szabály: az alacsony byte van írva az első (a sorrend „a legfiatalabb a legidősebb” - little-endian), a felső bájt van írva az első (a sorrend „big-endian” - big-endian).
Nyilvántartások és bájtsorrend
Byte sorrend fontos csak akkor van szükség, hogy megtörje a sorozat több-bájtos és írd a bájtok követő memóriahelyek. Azonban, ha van egy 32 bites regiszter, amely rendelkezik a 32-bites érték, akkor nincs értelme beszélni a megrendelés bájtok a memóriában. Regisztráció nem érzékeny a sorrendben „big-endian” vagy „a fiatalabb és az idősebb”; Csak regisztrálni üzletek 32 bites érték. A jobb szélső bit a legkisebb helyi értékű, a bal szélső bit egy vezető.
fontossága végződést
A bájtsorrend egy attribútum a rendszer, amely meghatározza, hogy egész képviselteti balról jobbra vagy jobbról balra. Sok programozó úgy gondolja, a mai világban a virtuális gépek és gigahertz processzor miért kellene vizsgálni a kérdést kezelni ezt a cikket? Sajnos, meg kell vizsgálni a byte-sorrend, valahányszor egy hardver vagy szoftver. És általában nincs olyan univerzális szabály, hogyan kell használni a byte sorrendben.
Minden processzor kell megtervezni bármilyen sorrendben „a legfiatalabb a legidősebb” vagy „big-endian”. Például, egy család Intel® processzorok 80x86 és klónokat használt „a fiatalabb és az idősebb”, míg a Sun SPARC processzorok, Motorola 68K és PowerPC használja rend „a régebbi a fiatalabb.”
Felvétel érdekében bájtmemória nagy probléma a tranzit hálózaton keresztül. Ismét, hogy ha elküldi a számot létre ugyanebben bájtsorrendjét felvétel, egy számítógép, amely az ellenkező sorrendben az írás, van egy probléma. A helyzetet tovább bonyolítja, ha a megbízás nem ismert felvétel bájt a távoli gépen.
1. példa mutatja következménye programozási zárja különbségek bájtbeírás irányba.
1. példa programozás zárja különbségek bájtbeírás irányba
2. példa A HexDump szénatomos a számítógép a rend „egy régebbi, hogy egy kisebb”
3. példa Következtetés hexdump -C parancsot a rögzítési sorrendben „a legfiatalabb a legidősebb”
Hatása tárolása érdekében bájtok memória kód
A különbség a bájtsorrendje nem mindig eredményét befolyásoló műveletek. Ha végre bitenkénti műveletek, illetve bitwise váltás egész szám, akkor nem veszi figyelembe az, hogy a byte a memóriában. Számítógépes szervez több bájtot, úgy, hogy a legkevésbé fontos bájt mindig a legfiatalabb, a legjelentősebb byte mindig a vezető.
Most képzeljük el, hogy ez a sor rögzíteni kell a fájlt write () metódus típusát. Azt hogy a mutató m és állítsa be a bájtok száma írni a fájlt (ebben az esetben négy). write () metódus kezeli byte byte, és kiírja egy fájlba kezdődő m és záró új sort.
Tehát beláttuk, hogy a byte-sorrend nem befolyásolja a képviseletét húrok C.
Bájtsorrend ügyekben. ha használja a leadott, ami függ az adott byte sorrendben. Egy példa egy ilyen helyzet a 4. példában látszik, de vegye figyelembe, hogy sok különböző típusú csökkentés, ami problémákat okozhat.
4. példa Forcing endian
Mi lesz az x értékét. Nézzük meg, mi a kód nem. Létrehoztunk egy két byte tömböt, majd átalakítani, hogy egy rövid típusú. Segítségével egy tömb, mi valójában arra kényszeríti a rendszert, hogy egy meghatározott byte sorrendben; lássuk, hogy a rendszer kezeli a két bájt.
Ha használt megközelítés „a junior és a senior”, 0 és 1 értelmezik hátra, és képviselteti 0.1. Mivel a felső bájt 0, és a legkevésbé fontos bájt 1, x értéke egyenlő 1-gyel.
Másrészt, a rendszerben az, hogy az „big-endian” byte értéke 1 és az x értéke egyenlő 256.
Meghatározása végződést futási időben
Az egyik módja, hogy meghatározzuk az, hogy a bájtok a rendszer -, hogy ellenőrizze a helyét a memóriában egy előre meghatározott állandó. Emlékezzünk vissza, hogy a lakóegységek (1) típusú integer 32 bites szám lesz olvasható - 00 00 00 01 rendelésre "big-endian" és a 01 00 00 00 Order "a legkevésbé a legtöbb". Nézzük az első bájt a folyvást megadhatja a sorrendben byte egy adott platform, majd, hogy a leghatékonyabb fellépés ebben a helyzetben.
5. példa megvizsgálja az első bájtját egésszel, hogy meghatározzuk, akkor 0 vagy 1. Ha 1, a jelenlegi platform használja a bájtok a memóriában üzemmódban „az alacsony érdekében, hogy a magas”, és ha 0 -, akkor a mód „big-endian ”.
5. példa meghatározása endian
Egy másik módja annak, hogy meghatározzák a sorrendben a bájt a használata mutatókat karakter byte beleértve int típusú, majd ellenőrizze az első byte - ez 0 vagy 1. 6. példa szemlélteti ezt a módszert.
6. példa Character Indexek
Hálózati bájtsorrend
Bájtsorrend „az idősebb és a fiatalabb,” kifejezésen a TCP / IP protokollt, néha a hálózati byte sorrendben. Még ha a számítógépek a hálózaton eljárás használatával „a legfiatalabb a legidősebb,” multi-byte-os egész értékeket átviteli hálózaton keresztül kell átalakítani, hogy a hálózat byte sorrendben, majd ismét visszaalakítható érdekében „a legfiatalabb a legidősebb,” a fogadó számítógép.
Ha a verem fut a processzor, amely a byte-sorrend „a legfiatalabb a legidősebb,” ő átrendezni során byte minden multi-byte értékei szintű címsorok TCP / IP protokollt. Ha a verem fut bájt üzemmódban „a legnagyobbtól a legkisebb”, akkor nincs ok az aggodalomra. Volt, hogy verem a hordozhatóság (fut a CPU két típus), akkor képesnek kell lennie arra, hogy határozzon a szükségességét, hogy kötelezzék átrendezési bájt fordításkor.
Hajtsák végre az ilyen átsorrendező foglalatok biztosítják egy sor makrók átalakítására bájtok sorozata aszerint, hogy azok tárolási a fogadó, és a konvertáló bájt, ha át őket egy fogadó hálózati byte sorrendben, az alábbiak szerint.
htons () átrendezi bájt egy 16-bites előjel nélküli értéke sorrendben használják a jelenlegi processzor, a hálózati byte sorrendben. Makró nevét is értelmezhetjük, hogy „host a hálózat rövid” ( „annak érdekében, hogy megtérít az előjel nélküli rövid számot a hálózati byte sorrendben”). htonl () átrendezi bájt 32 bites előjel nélküli értéke sorrendben használják a jelenlegi processzor, a hálózati byte sorrendben. Makró nevét is értelmezhetjük, hogy „host, hogy a hálózat hosszú” ( „annak érdekében, hogy megtérít az előjel nélküli hosszú számot a hálózati byte sorrendben”). ntohs () átrendezi bájt egy 16 bites, előjel nélküli érték a hálózati byte sorrendben bájtsorrend használják az aktuális processzor. makró nevét lehet dekódolni, mint „hálózati, hogy a fogadó rövid” ( „ki a hálózat érdekében ahhoz, hogy a használt processzorral, egy 16-bites szám”). ntohl () átrendezi byte 32 byte-előjel nélküli értéket egy hálózati annak érdekében, bájtsorrend használják az aktuális processzor. makró nevét lehet dekódolni, mint a „hálózat, hogy a fogadó hosszú” ( „ki a hálózat érdekében ahhoz, hogy a processzor használt 32-bites szám”).
Tekintsünk egy programot a 7. példa.
7. példa: Program C
Ez a program megmutatja, hogy a tárolt x változó típusú hosszú tárolási érték 112A380 (hexadecimális).
Ha ez a program végre egy processzor, amely a byte-sorrend „a legfiatalabb a legidősebb” megjeleníti az információkat a 8. példában leírt.
8. példa Az eredmény egy olyan program a CPU üzemmód „a legkevésbé a legtöbb”
9. példa mutatja az eredményeket az azonos programot egy processzor mód „big-endian”.
9. példa Az eredmény egy olyan program a CPU üzemmód „big-endian”
Megfordítva a bájtsorrend
Most írni egy programot, az eredmények, amelyek függetlenek a byte sorrendben. Biztosítania kell, hogy a fájl adatai rögzítésre kerülnek a megfelelő sorrendben, amikor a fájl írása vagy olvasni az adatokat belőle. Azt is meg kell kerülni, és feltételes fordítási zászlókat a programkód, hogy a képesség, hogy automatikusan meghatározza a végződést használjuk az adott számítógépen.
Készítsen olyan funkciót, amely automatikusan megfordítja a bájtsorrendjét egy adott paramétert, attól függően, hogy a byte-sorrend a számítógépen.
Először meg kell foglalkozni s paraméter típusú rövid. elosztjuk két bájt, majd a „ragasztó” őket fordított sorrendben. Amint azt a 10. példában ismertetjük, a függvény értékét adja vissza fordított típusú változó rövid, ha a processzor használ bájtsorrend „a junior a vezető”. Ellenkező esetben a függvény azt változatlanul hagyja a változó értékét s.
10. példa 1. módszer: Egy Biteltolás és ragasztási bitek
A funkció alakítjuk peremennayayu fajtája rövid alább. bemutatni, hogy tömbként karakterek, majd létrehoz egy új tömböt, amely a fordított az első, ha a feldolgozó a módot „a legfiatalabb a legidősebb.”
11. példa 2. módszer: használata mutatókat karakter tömb
Most pedig egy int.
12. példa 1. módszer: Egy Biteltolás és byte kötési jellege int
Ez többé-kevésbé megfelel a mi szoktunk csinálni a változatosság kedvéért fordított sorrendben írja rövid. de négy bájt, nem kettő.
13. példa 2. módszer: egy karakter tömb mutatókat int típusú
Ugyanez tettük a megfordítása egy változó típusú rövid. de négy bájt feldolgozása itt.
Ugyanígy meg lehet változtatni a big-endian egy úszó, hosszú, dupla, és más típusú, de a Ezeknek a kérdéseknek túlmutat ezt a cikket.
következtetés
Nagyjából, nincs különösebb előnye egy adott byte sorrendben. Mindkét megbízás közös, és használják sok számítógépes architektúra. Processzorok üzemmód „a fiatalabb és az idősebb” használható a legtöbb személyi számítógépek.
Gondok vannak az bájtsorrendjét nem befolyásolja változók tárolják egy bájt, mint „bájtok száma” kell tekinteni az információ alapegysége tárolás a memóriában. Másrészt több-bájtos változó függ a byte sorrendben. Meg kell jegyezni, amikor létrehozza az alkalmazást.
Get termékek és technológiák
- IBM próbaszoftver. próbaverziói szoftverfejlesztők, amely letölthető a developerWorksön. (EN)