Kezdőlap › Fórumok › Programozás › bajtsorrend
- This topic has 4 hozzászólás, 4 résztvevő, and was last updated 22 years telt el by
blackjack.
-
SzerzőBejegyzés
-
2003-08-13-08:27 #1910883
egyszerû: az int 2 byte-os, a *(char*)&x pedig az x címére mutató mutató által mutatott egy byte 🙂
ezt nem tudom normálisan elmagyarázni…
szóval egyetlen byte-ra mutat, ez a két byte-os int fele, és itt vagy 0 van, vagy 12003-08-14-13:47 #1910884egyszerû: az int 2 byte-os
Az int a gcc alatt soha nem volt 2 bájtos, hanem 4 bájtos. Ha nem hiszed:
printf(„int mérete: %dn”, sizeof(int));*(char *)&x
ez 3 részbõl áll össze:
&x: az x változó címe
(char*)&x: az intre mutató pointer átállítása char típusra mutatóra
*(…): a zárójelben levõ mutató átkonvertálása hivatkozásra
így talán kicsit jobban érthetõ:
*((char *)(&x))
Kizárólag a lényegét tekintve a (char)x -re hasonlít, de nem értéket konvertál, hanem az x változó legelsõ bájtját adja vissza.Az (int)1 érték így tárolódik a memóriában (a címek növekvõ sorrendben vannak, 0. 1. 2. 3. bájt):
Little-endian: 01 00 00 00
Big-endian: 00 00 00 012003-08-14-14:25 #1910885Ha esetleg nem lenne világos mindkettõ formátum, akkor írok két példát:
Big-endian: az arab számok írásának sorrendje balról jobbra történõ írás esetén (pl. magyar, angol). Ilyenkor a legnagyobb helyiérték kerül a legelsõ helyre.
Little-endian: az arab számok írása arab nyelvi környezetben (jobbról balra). A kisebb helyiérték lesz elõször leírva.Legyen p (int*), és r (char*) típusú pointer. Ilyenkor az r = (char*)p kiértékelése így történik:
Big-endian: r = p + 3;
Little-endian: r = p;
Az elsõt egyes RISC processzorok alkalmazzák, míg pl. az x86 architektúra az utóbbit alkalmazza.2003-11-26-21:49 #1910886Sziasztok!
Amit elmondtatok az ok, de hogy lehet mondjuk ezzel a módszerrel az int különbözõ bytejaihoz char pointert rendelni, hogy pl. az egyes byteok értékeit karakterként iratnám ki.
2009-12-04-19:55 #1870383Valaki lecci magyarazza el. hogy az alabi progi higy mukszik? Elvileg a bajtsorrendet donti el
main()
{
int x = 1;if (*(char *)&x == 1) {
printf(„little-endiann”);
} else {
printf(„big-endiann”);
}
}if -el kezdodo sor nem vilago.
Koszi -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.

legutóbbi hsz