2014-10-30 48 views
0

對於一個任務,我在Visual Studio中進行Huffman算法的壓縮/解壓縮。在我得到8位(例如10101010)之後,我想將它轉換爲一個字節。這是我的代碼:C++ bitstring到字節

unsigned byte = 0; 
    string stringof8 = "11100011"; 
    for (unsigned b = 0; b != 8; b++){ 
     if (b < stringof8.length()) 
      byte |= (stringof8[b] & 1) << b; 
    } 
    outf.put(byte); 

第一對夫婦位串輸出正確的字節但當時如果我推超過3個字節,我得到了相同的字節多次。我不熟悉位操作,並且要求有人通過這個步驟來指導我或者通過一個工作函數。

+0

你爲什麼| = 1 << b if b is > = stringof8.length()? – 2014-10-30 15:23:14

+0

什麼是'stringof8'? – 2014-10-30 15:24:40

+0

您的stringof8是一個ASCII字符串,代表二進制位嗎?如果是這樣,那麼ascii「1」首先通過從ascii「0」中減去ascii「1」轉換爲數字1,然後您可以執行位操作。 – DNT 2014-10-30 15:33:06

回答

1

使用的std :: bitset的

#include <iostream> 
#include <string> 
#include <bitset> 


int main() { 

    std::string bit_string = "10101010"; 
    std::bitset<8> b(bit_string);  // [1,0,1,0,1,0,1,0] 
    unsigned char c = (b.to_ulong() & 0xFF); 
    std::cout << static_cast<int>(c); // prints 170 

    return 0; 
} 
+0

+1使用bitset的好例子。只是C表演... – Tacet 2014-10-30 19:37:06

+1

@Tacet是的,改爲C++的方式 – 4pie0 2014-10-30 19:52:03

+0

@AB_感謝你的代碼!能夠正確輸出字節 – ashep08 2014-10-30 19:58:43