Re: Jak to v C++ napsat líp?

Pablo na xpablo.cz Pablo na xpablo.cz
Čtvrtek Srpen 31 08:53:13 CEST 2023


Presne tak - pouzit union, nebo aspon, pokud jsou k dispozici, tak makra 
HTONS/L, ktery osetri endian.

-- 
Pavel Brychta
http://www.xpablo.cz

---------- Původní e-mail ----------
Od: tomas mainzer <t.mainzer na gmail.com>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 31. 8. 2023 8:50:32
Předmět: Re: Jak to v C++ napsat líp?
"

Muze byt. co jsem koukal na podobne konstrukce do kodu, prekladace z toho 
obvykle poznaji co chcete a resi to ocekavane (presunuji byte, ne ze tam 
realne delaji tu rotaci) 

Ale je li pozadovana prenositelnost - pak je napr ruzne sizeof(int) a ruzna 
endianita - tak je treba davat dost pozor a zachazet s tim vsude stejne. 


Minimalne bych pouzil je li mozne definici uint16_t misto int. take pozor na
char, norma nedefinuje znamenko takze explicitne uvadet unsigned, nebo uzit 
uint8_t. 

Dalsi  mozny pristup je pres union ala:  






typedef struct tag16b {



union {

  struct {

    uint16_t w;   //word

  };  

  struct {

    uint8_t b[2];  //bytes

  };

  struct {                //bits

    unsigned b0:1;

    unsigned b1:1;

    unsigned b2:1;

    unsigned b3:1;

    unsigned b4:1;

    unsigned b5:1;

    unsigned b6:1;

    unsigned b7:1;

    unsigned b8:1;

    unsigned b9:1;

    unsigned b10:1;

    unsigned b11:1;

    unsigned b12:1;

    unsigned b13:1;

    unsigned b14:1;

    unsigned b15:1;

    };

  };

} int16b;









čt 31. 8. 2023 v 8:10 odesílatel Jaroslav Buchta <jaroslav.buchta na hascomp.cz
(mailto:jaroslav.buchta na hascomp.cz)> napsal:

"Me to prijde dost OK, pokud se doplni komentar...
Daly by se asi udelat nejake kudrlinky, makra, pretizit operatory, 
udelat na to objekty... ale pokud je to jen na jednom/par mistech... ;-)

Dne 31.08.2023 v 8:05 Martin Záruba napsal(a):
> Mám pole
>
> int A[2];
>
> potřebuji do něj ale vložit  čtyři znaky ABCD. Vymyslel jsem
>
> A[0] = ('A' << 8) | 'B';
> A[1] = ('C' << 8) | 'D';
>
> nejde to nějak líp? Toto funguje, ale je to docela nesrozumitelné.
>

_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz(http://www.hw.cz)
Hw-list na list.hw.cz(mailto:Hw-list na list.hw.cz)
http://list.hw.cz/mailman/listinfo/hw-list
(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ší část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230831/1c4635c1/attachment.htm>


Další informace o konferenci Hw-list