2017-04-12 29 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

我改變了,謝謝:) –