Pretypovani ukazatele struktury na bajt

Libor Konečný support na mikrovlny.cz
Pondělí Únor 24 22:35:00 CET 2020


Ano prvni 2 bajty byly spravne, spatne jsem se dival na vypis Kbajtu z 
debugu.
Ostatni byly rozhozene a zarovnane.
Do starych casu to vratil  __attribute__((packed)) hdr;

LK

Dne 24.2.2020 v 9:06 Josef Štengl napsal(a):
> 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
> _______________________________________________
> 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