我想将读取位从二进制文件转换为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
。谁能帮我?先谢谢你。
答案 0 :(得分:2)
您需要#include <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)。