我有一個std :: bitset < 32>我想隔離正確的16位並輸出這些位,就好像它們是有符號數字一樣。我也希望把整個32位的東西作爲一個有符號的數字輸出。但是,Bitset不支持signed int to_string()。將bitset轉換爲signed
例如 1010000000100001 1111111111111111:
我想一個輸出爲:
-1608384513爲全序列
-1爲右16個比特。
任何光滑的方式來轉換它們?
我有一個std :: bitset < 32>我想隔離正確的16位並輸出這些位,就好像它們是有符號數字一樣。我也希望把整個32位的東西作爲一個有符號的數字輸出。但是,Bitset不支持signed int to_string()。將bitset轉換爲signed
例如 1010000000100001 1111111111111111:
我想一個輸出爲:
-1608384513爲全序列
-1爲右16個比特。
任何光滑的方式來轉換它們?
要獲得16位數字,您可以使用to_ulong()
,刪除高16位,並重新解釋爲int16_t
。
同樣,對於有符號的32位數字,您可以撥打to_ulong()
,並重新解釋爲簽名爲int32_t
。
std::bitset<32> b("10100000001000011111111111111111");
int16_t x16 = (int16_t)(b.to_ulong() & 0xFFFF);
int32_t x32 = (int32_t)b.to_ulong();
cout << x16 << endl;
cout << x32 << endl;
你甚至需要位掩碼嗎?無論如何,演員陣容都會剔除高位,所以它們的價值應該不會有多大關係。 –
你可能嘗試這種(但我想驗證首先從多個experenced C++的bitset用戶):'無符號長長VAL = bitset.to_ullong(); int16_t final =(int16_t)(val&000000000000FFFF);' – synchronizer