如何在c ++中将bitset转换为short?

时间:2011-11-17 10:59:00

标签: c++ bit-manipulation short bitset

如果我有bitset<16> bits(*iter)和我的短片 我怎么能把这个拳头分配给我的短片?

short myShort = ??bits??

可以转换位集&lt; 16&gt;。简短?

5 个答案:

答案 0 :(得分:4)

你真的应该使用无符号短路,以避免高位上的语言怪癖。

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

答案 1 :(得分:2)

我会使用to_ulong方法,然后转换结果(因为你知道只会使用最低的16位):

short myShort = static_cast<short>( bits.to_ulong() );

答案 2 :(得分:2)

正如其他人所说,to_ulong会奏效。直到我查看标准,C ++03§23.3.5/ 3,

我才感到有些疑问
  

当在类bitset的对象和某个整数类型的值之间进行转换时,位位置pos对应于位值1 << pos。对应于两位或更多位的积分值是它们的位值之和。

因此,您可以将to_ulong转换为unsigned short(或者更好,uint16_t),而无需担心溢出或字节序。

答案 3 :(得分:0)

答案 4 :(得分:0)

bitset<16> b;
...   
short myShort = (short)b.to_ulong();