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

tomas mainzer t.mainzer na gmail.com
Čtvrtek Srpen 31 08:47:08 CEST 2023


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>
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
> 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/64a02af2/attachment.htm>


Další informace o konferenci Hw-list