Pretypovani ukazatele struktury na bajt

Josef Štengl ok1ced na nagano.cz
Pondělí Únor 24 09:06:18 CET 2020


Napadá mě zarovnání, leč v tom případě by byli první 2 byte správně. Zkoušel jste to odkrokovat? Pak by mělo být jasněji.

Jinak správný způsob je naplnit tu strukturu, ne ji přetypovat a spoléhat se, že to vyjde. Pak nevíte co udělá jiný 
kompilátor, nebo optimalizace.

Dne 23. 02. 20 v 17:13 Libor Konečný napsal(a):
> Zdravim osazenstvo, predevsim zdejsi programatory.
> 
> S novym kompilatorem (ten stary to nejakou zahadou umel)  resim pretypovani ukazatelu.
> 
> Mam funkci (zjednodusene)
> void  funkce (UINT8 * from)
> {
> *from++=0x01 ;
> *from++=0x02 ;
> *from++=0x03 ;
> *from++=0x04 ;
> *from++=0x05 ;
> *from=0x06 ;
> }
> 
> 
> A pak strukduru
> struct {
>    UINT16 magic;
>    DWORD ident;
> }  hdr;
> 
> A potrebuji ji naplnit,
> tedy volam
> funkce ((UINT8*)&hdr);
> 
> ale kompilator to naplni vzdy jen jednim znakem
> 
> tedy vysledek je ze hdr.magic ma jen prvni bajt spravny.
> 
> Pokud pouziji strukturu
> struct {
>    UINT8 pole[6];
> }  hdr;
> 
> Pak se naplni vsech 6 bajtu spravne.
> 
> Jak ji volat spravne aby se struktura prepisovala bajt po bajtu ? (little a big endian zanedbejme)
> Je zvlastni, ze stary kompilator fungoval spravne.
> 
> Dekuji za nakopnuti.
> LK
> 
> 
> 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list