[elektro] C18 kérdés
Skandar Graun
sgraun at gmail.com
Fri Oct 11 19:01:57 CEST 2013
Akkor ez így is jó lenne?
x = (unsigned int *)&tomb[0];
2013. október 11. 0:46 potyo írta, <potyo.ada at gmail.com>:
> 2013. október 11. 0:34 flaist írta, <flaist at gmail.com>:
>
> > Sziasztok!
> >
> > Adott a következő adat mozgatás C18-ban.
> >
> > unsigned char tomb[12];
> > unsigned int x; //C18-ban 2 byte-t jelent
> >
> > x = (unsigned int) tomb[0];
> >
> > Hibátlanul lefordul, de csak 1 byte-t másol, tomb[1]-t nem viszi át..
> >
> > Ez viszont jó lesz!
> >
> > x = (unsigned int)* (unsigned int *)&tomb[0];
> >
> > Nem értem az első mért nem jó?
> >
> > C18 hiba, vagy a jogos amit csinál?
>
>
> Jogos. Az első esetben azt csinálod, hogy kiolvasod a tomb[0] tartalmát, és
> magát az értéket castolod két bájtra. Mivel a tomb[0] csak egy bájtos,
> ezért ezt az egy bájtos értéket másolja át az x változóba. Ez ugyanaz,
> mintha azt írnád, hogy x=tomb[0];
>
> A második eset viszont azért jó, mert a tomb[0] memóriacímét kiszeded, ezt
> castolod, hogy ne egy, hanem két bájtos típusra mutatóként legyen
> értelmezve a továbbiakban, majd dereferenciálod a mutatót, ami azt jelenti,
> hogy kiolvasod a kétbájtos értéket az adott memóriacímtől kezdődően, majd
> ezt castolod két bájtosra (ennek amúgy nincs jelentősége), és ezt az
> értéket másolod be az x változóba.
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list