se ho un bitset<16> bits(*iter)
e un mio corto come posso assegnare questo bist al mio corto?Come posso convertire bitset in cortocircuito in C++?
short myShort = ??bits??
È possibile convertire un set di bit < 16> in cortocircuito?
se ho un bitset<16> bits(*iter)
e un mio corto come posso assegnare questo bist al mio corto?Come posso convertire bitset in cortocircuito in C++?
short myShort = ??bits??
È possibile convertire un set di bit < 16> in cortocircuito?
È consigliabile utilizzare un cortocircuito senza segno, per evitare stranezze di linguaggio sul bit più elevato.
unsigned short myShort = (unsigned short)bits.to_ulong();
userei il metodo to_ulong
per questo, e gettato il risultato (in quanto si sa che sarà utilizzato solo il più basso a 16 bit):
short myShort = static_cast<short>(bits.to_ulong());
bitset<16> b;
...
short myShort = (short)b.to_ulong();
Come altri hanno già detto, to_ulong
funzionerà. Avevo qualche dubbio sul fatto che il bit order fosse garantito fino a quando non ho guardato lo Standard, C++ 03 §23.3.5/3,
Quando si converte tra un oggetto di bit di classe e un valore di tipo integrale , la posizione bit
pos
corrisponde al valore di bit1 << pos
. Il valore integrale corrispondente a due o più bit è la somma dei loro valori di bit.
Quindi, si può lanciare to_ulong
-unsigned short
(o meglio ancora, uint16_t
) senza preoccuparsi di overflow o endianness.
+1 per leggere effettivamente le cose. –