将十进制数的每一位转换为相应的二进制数

标签 c arrays binary c-strings

我需要将字符串“12345678”转换为值 00010010001101000101011001111000(二进制值只有左边没有零)。 所以我用 c 语言编写了这段代码,问题是当我运行它时它什么都不做,就像有错误一样等待,直到我手动停止它。 有什么想法吗?

#include <stdio.h>
#include <string.h>

void reduce(char string[]) {
    int i=0, j=0, k=0, cnt=0, tmp=4, num;
    char arr[4], result[4*strlen(string)];
    for (i=0; i<strlen(string); i++) {
            num = atoi(string[i]);
            while (num != 0) {
                    arr[j++] = num%2;
                    num = num/2;
                    tmp--;
            }
            while (tmp != 0) {
                    arr[j++] = 0;
                    tmp--;
            }
            j--;
            for (k=i*4; k<(i*4+4); k++) {
                    result[k++] = arr[j--];
            }
            j = 0;
            tmp = 4;
    }
    printf("The result is: \n");
    for (i=0; i<4*strlen(result); i++) {
            printf("%d",result[i]);
    }
    printf("\n");
}

 int main() {
    char c[8] = "12345678";
    reduce(c);
    return 0;
}

最佳答案

您的代码中有很多小错误,这使得很难查明单个错误。主要问题似乎是您混淆了二进制数 (0, 1) 和 ASCII 数字 ("0", "1") 并且误用了字符串函数。

  1. 如其他地方所述,char c[8] = .. 是错误的。
  2. atoi(string[i]) 无法工作;它需要一个 string,而不是 char。使用 `num = string[i]-'0';
  3. arr[..] 获取值'num%2,即一个数值。最好使用'0'+num%2 这样它就是一个字符串。
  4. 您在 result[k++] 中递增 k,在一个已经递增 k
  5. 的循环中
  6. 在打印前的末尾添加 result[k] = 0;,这样 strlen 就可以正常工作了
  7. 4*strlen(result) 太多了——strlen 就是这样。
  8. 你不妨做一个简单的 printf("%s\n", result);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reduce(char string[]) {
    int i=0, j=0, k=0, cnt=0, tmp=4, num;
    char arr[5], result[4*strlen(string)+1];
    for (i=0; i<strlen(string); i++) {
            num = string[i]-'0';
            while (num != 0) {
                    arr[j++] = '0'+num%2;
                    num = num/2;
                    tmp--;
            }
            while (tmp != 0) {
                    arr[j++] = '0';
                    tmp--;
            }
            arr[j] = 0;
            j--;
            for (k=i*4; k<(i*4+4); k++) {
                    result[k] = arr[j--];
            }
            j = 0;
            tmp = 4;
    }
    result[k] = 0;
    printf("The result is: \n");
    for (i=0; i<strlen(result); i++) {
            printf("%c",result[i]);
    }
    printf("\n");
}

 int main() {
    char c[] = "12345678";
    reduce(c);
    return 0;
}

..导致

The result is: 
00010010001101000101011001111000

关于将十进制数的每一位转换为相应的二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400423/

相关文章:

javascript - 对对象数组进行分组的最有效方法

C编程: Initialize Array of Unions

arrays - awk 命令结果放入数组

php - 如何使用php将base64字符串转换为二进制数组

javascript - JavaScript 中位运算符的克隆函数列表?

c - 在C中,有没有更好的方法来计算不确定性值?

c - c语言内嵌嵌套的限制: Is there a hard limit on this?

c - 在结构内部使用时的指针相等性

python - 从C到Python : writing binary

c - 用FD_SET制作读写集,用于在C中发送和接收数据