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