2017-04-12 32 views
1

我想将二进制文件的读取位转换为字符,以便将其添加到表示文件内容的二进制格式的字符串中。我的任务也是逐字节读取一个文件。我有下面的代码:如何将一个位转换为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

单个比特b(是或)可被转换为bool。在你的情况bool b = (c>>i)&1;

所以你可能想编码b?'1':'0'使用ternary conditional operator

你也可以代码"01"[(unsigned)b](或只是"01"[b])或(char)('0'+(unsigned)b),但我觉得这是对人类的可读性(两者唯一的工作,因为(unsigned)b只能是0或1)。

+0

演员是否需要? '“01”[true]'表示'*(“01”+ true)'。重载解析是明确的,因为只有'真'需要被提升。 – MSalters

+0

这不是必需的,但在我看来更可读。 –

2

需要bitset#include <bitset>

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

'sizeof(char)'是毫无意义的,这是一个_by definition_。 – MSalters

+0

我改变了,谢谢:) –