2011-11-17 23 views

Trả lời

4

Bạn thực sự nên sử dụng một dấu ngắn, để tránh ngôn ngữ quirks trên bit cao.

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

Tôi muốn sử dụng phương pháp to_ulong cho điều này, và đúc kết quả (kể từ khi bạn biết rằng chỉ có 16 bit thấp nhất sẽ được sử dụng):

short myShort = static_cast<short>(bits.to_ulong()); 
0
bitset<16> b; 
... 
short myShort = (short)b.to_ulong(); 
2

Như những người khác đã nói, to_ulong sẽ hoạt động. Tôi đã cảm thấy nghi ngờ rằng thứ tự bit được đảm bảo cho đến khi tôi xem xét tiêu chuẩn, C++ 03 §23.3.5/3,

Khi chuyển đổi giữa một đối tượng của lớp bitet và giá trị của một số loại tích phân , vị trí bit pos tương ứng với giá trị bit 1 << pos. Giá trị tích phân tương ứng với hai hoặc nhiều bit là tổng giá trị bit của chúng.

Vì vậy, bạn có thể cast to_ulong-unsigned short (hoặc tốt hơn chưa, uint16_t) mà không lo lắng về tràn hoặc endian.

+0

+1 để đọc mọi thứ. –

Các vấn đề liên quan