2011-11-17 19 views

Respuesta

4

Debería usar un corto sin signo, para evitar problemas de lenguaje en el bit alto.

unsigned short myShort = (unsigned short)bits.to_ulong(); 
2

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()); 
0
bitset<16> b; 
... 
short myShort = (short)b.to_ulong(); 
2

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 bit 1 << 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.

+0

+1 para leer cosas realmente. –

Cuestiones relacionadas