2017-01-30 186 views
-1

我必须将十进制值转换为显示二进制值的字符串,例如给定8,我需要打印一个字符串“1000”。我有从十进制转换为二进制,但是当我直接从char数组中打印值时,我得到的问号而不是数字。我知道它与char数组读取值的方式有关,但我无法弄清楚如何纠正这个问题。如何打印char数组的元素?

void dec2Bin(int value, char binaryString[]) { 

int remainder = 0; 
int binDigit = 0; 
int i = 0; 
while (value != 0) { 
    binDigit = value % 2; 
    value /= 2; 
    binaryString[i] = char(binDigit); 
    i++; 
} 

for (int k = i - 1; k > 0; k--) { 
    cout << binaryString[k]; 
} 
} 




int main() 
{ 
cout << "Enter a decimal number: "; 
int num; 
cin >> num; 

char binaryString[20] = ""; 

dec2Bin(num, binaryString); 

return 0; 
} 

回答

3

当你

binaryString[i] = char(binDigit); 

要指定十进制值01binaryString[i]。没关系,char基本上只不过是一个小整数。

的问题来当您想要打印的价值,作为唯一的重载<<运营商来处理char对待人物一个字符,并且在大多数编码值01是不可打印的。

解决办法有两个:

  1. 要么你转换要打印到不被视为一个字符一个更大的整数字符:

    cout << static_cast<int>(binaryString[k]); 
    
  2. 或者你做阵列包含实际的可打印字符:

    binaryString[i] = binDigit + '0'; 
    
+0

非常感谢你的亲切陌生人。我一直试图了解这个问题几个小时。我用binDigit + 0,它完美地工作。 – so8857