Как я могу преобразовать набор битов в короткие в C ++? - PullRequest
5 голосов
/ 17 ноября 2011

если у меня есть bitset<16> bits(*iter) и мой короткий как я могу назначить этот бист на мой короткий?

short myShort = ??bits??

Возможно ли преобразовать битовый набор <16> в короткий?

Ответы [ 5 ]

4 голосов
/ 17 ноября 2011

Вы действительно должны использовать шрифт без знака, чтобы избежать языковых причуд в старшем бите.

unsigned short myShort = (unsigned short)bits.to_ulong();
2 голосов
/ 17 ноября 2011

Как уже говорили другие, to_ulong будет работать. У меня было некоторое сомнение, гарантирован ли порядок битов, пока я не посмотрел на Стандарт, C ++ 03 §23.3.5 / 3,

При преобразовании между объектом класса bitset и значением некоторого интегрального типа позиция бита pos соответствует значению бита 1 << pos. Интегральное значение, соответствующее двум или более битам, является суммой их битовых значений.

Итак, вы можете привести to_ulong к unsigned short (или, что еще лучше, uint16_t), не беспокоясь о переполнении или порядке байтов.

2 голосов
/ 17 ноября 2011

Я бы использовал для этого метод to_ulong и произвел бы результат (поскольку вы знаете, что будет использоваться только младший 16-битный):

short myShort = static_cast<short>( bits.to_ulong() );
0 голосов
/ 17 ноября 2011
bitset<16> b;
...   
short myShort = (short)b.to_ulong();
0 голосов
/ 17 ноября 2011

использование to_ulong http://new.cplusplus.com/reference/stl/bitset/to_ulong/

...