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