ショートパンツを持っている場合bitset<16> bits(*iter)
、このビストをショートパンツに割り当てるにはどうすればよいですか?
short myShort = ??bits??
ビットセット<16>をshortに変換することは可能ですか?
ショートパンツを持っている場合bitset<16> bits(*iter)
、このビストをショートパンツに割り当てるにはどうすればよいですか?
short myShort = ??bits??
ビットセット<16>をshortに変換することは可能ですか?
ハイビットでの言語の癖を避けるために、実際にはunsignedshortを使用する必要があります。
unsigned short myShort = (unsigned short)bits.to_ulong();
この方法を使用してto_ulong
、結果をキャストします(最下位の16ビットのみが使用されることがわかっているため)。
short myShort = static_cast<short>( bits.to_ulong() );
他の人が言ったように、to_ulong
動作します。標準、C++03§23.3.5/3を見るまで、ビット順序が保証されているかどうか疑問を感じていました。
クラスbitsetのオブジェクトとある整数型の値の間で変換する場合、ビット位置
pos
はビット値に対応します1 << pos
。2つ以上のビットに対応する整数値は、それらのビット値の合計です。
したがって、オーバーフローやエンディアンの心配をせずto_ulong
にunsigned short
(またはさらに良いことに)キャストできます。uint16_t
http://new.cplusplus.com/reference/stl/bitset/to_ulong/を使用しますto_ulong
bitset<16> b;
...
short myShort = (short)b.to_ulong();