我正在使用除法方法将无符号整型整数转换为二进制。我有以下代码。但是,编译和执行后我没有从程序中得到任何输出(我只是得到新行转义)。
如有任何帮助,我们将不胜感激。预先感谢您。
#include <stdio.h>
/*
unsigned int is 0 or greater than 0
convert unsigned int into binary.
*/
const int ARRAY_SIZE = 100;
void reverseCharArray(char *x, int len) {
for (int end = len - 1, beg = 0; beg < end; end--, beg++) {
char temp = x[beg];
x[beg] = x[end];
x[end] = temp;
}
}
void convertWholeNumberToBinary(unsigned int x, char *result) {
int i = 0;
while (x != 0) {
result[i] = x % 2;
x = x / 2;
i++;
}
reverseCharArray(result, ARRAY_SIZE);
}
int main() {
char result[ARRAY_SIZE];
convertWholeNumberToBinary(294, result);
// 100100110
printf("%s\n", result);
return 0;
}
当输入为 294 时,所需的输出为“100100110”。我期望标准输出显示“100100110”。我知道我错过了一些东西,但我现在无法理解它。
您犯了一些错误,但最大的错误是当您反转字符数组时。您正在传递
ARRAY_SIZE
但数组尚未完全填满。您要传递 i
,它表示字符串的实际长度。
您还可以向字符串添加
1
或 0
,而不是等效的 char。
#include <stdio.h>
const int ARRAY_SIZE = 100;
void reverseCharArray(char *x, int len) {
for (int end = len - 1, beg = 0; beg < end; end--, beg++) {
char temp = x[beg];
x[beg] = x[end];
x[end] = temp;
}
}
void convertWholeNumberToBinary(unsigned int x, char *result) {
int i = 0;
while (x != 0) {
result[i] = '0' + (x % 2);
x = x / 2;
i++;
}
reverseCharArray(result, i);
}
int main() {
char result[ARRAY_SIZE] = "";
convertWholeNumberToBinary(294, result);
printf("%s\n", result);
return 0;
}