si tengo un bitset<16> bits(*iter)
y un corto ¿cómo puedo asignar esta bist a mi corto?¿Cómo puedo convertir bitset en abreviado en C++?
short myShort = ??bits??
Es posible convertir un bitset < 16> a corto?
si tengo un bitset<16> bits(*iter)
y un corto ¿cómo puedo asignar esta bist a mi corto?¿Cómo puedo convertir bitset en abreviado en C++?
short myShort = ??bits??
Es posible convertir un bitset < 16> a corto?
Debería usar un corto sin signo, para evitar problemas de lenguaje en el bit alto.
unsigned short myShort = (unsigned short)bits.to_ulong();
me gustaría usar el método to_ulong
para esto, y arrojó el resultado (ya que usted sabe que va a ser utilizado sólo el 16 bit más bajo):
short myShort = static_cast<short>(bits.to_ulong());
bitset<16> b;
...
short myShort = (short)b.to_ulong();
Como han dicho otros, to_ulong
funcionará. Tenía dudas sobre si el orden de los bits estaba garantizado hasta que miré el estándar, C++ 03 §23.3.5/3,
Al convertir un objeto de clase del conjunto de bits y un valor de algún tipo integral , la posición de bit
pos
corresponde al valor de bit1 << pos
. El valor integral correspondiente a dos o más bits es la suma de sus valores de bit.
Por lo tanto, puede convertir to_ulong
-unsigned short
(o mejor aún, uint16_t
) sin preocuparse de desbordamiento o endianness.
+1 para leer cosas realmente. –