如何将单个位转换为char?

时间:2017-04-12 07:08:28

标签: c++ string file binary

我想将读取位从二进制文件转换为char,因此我可以将其添加到表示文件内容的二进制格式的字符串中。我的任务也是逐字节读取文件。我有以下代码:

while(f.get(c)){
    for(int i=0;i<8;i++){
        cout << ((c>>i)&1);     //I would like to convert a single bit to a char here
    }
}

我无法理解如何操作,因为如果我只是将((c>>i)&1)添加到字符串中,我会为每个读取的位获取二进制形式,因此0变为00000000。谁能帮我?先谢谢你。

2 个答案:

答案 0 :(得分:2)

您需要#include <bitset>

中的bitset
while( f.get(c) ) {
    bitset<sizeof(c) * CHAR_BIT> currentByte(c);
    cout << currentByte;
}

答案 1 :(得分:2)

单个位bool(是,或)可以转换为bool b = (c>>i)&1;。在您的情况下b?'1':'0'

因此,您可能希望使用ternary conditional operator代码"01"[(unsigned)b]

您也可以对"01"[b](或仅(char)('0'+(unsigned)b))或(unsigned)b进行编码,但我觉得它对人类的可读性较低(两者都有效,因为<ul>只能是0或1)。