在 C 中将无符号整型整数转换为二进制

问题描述 投票:0回答:1

我正在使用除法方法将无符号整型整数转换为二进制。我有以下代码。但是,编译和执行后我没有从程序中得到任何输出(我只是得到新行转义)。

如有任何帮助,我们将不胜感激。预先感谢您。

#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”。我知道我错过了一些东西,但我现在无法理解它。

c++ c
1个回答
0
投票

您犯了一些错误,但最大的错误是当您反转字符数组时。您正在传递

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.