2014-10-30 237 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