Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将十进制数的每个数字转换为相应的二进制数_C_Arrays_Binary_C Strings - Fatal编程技术网

C 将十进制数的每个数字转换为相应的二进制数

C 将十进制数的每个数字转换为相应的二进制数,c,arrays,binary,c-strings,C,Arrays,Binary,C Strings,我需要将字符串“12345678”转换为值000100100010100001011001111000(仅二进制值,左侧不带零)。 所以我用c编写了这段代码,问题是当我运行它时,它什么也不做,只是像出现错误一样等待,直到我手动停止它。 有什么想法吗 #include <stdio.h> #include <string.h> void reduce(char string[]) { int i=0, j=0, k=0, cnt=0, tmp=4, num;

我需要将字符串“12345678”转换为值000100100010100001011001111000(仅二进制值,左侧不带零)。 所以我用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;
}
#包括
#包括
void reduce(字符字符串[]){
int i=0,j=0,k=0,cnt=0,tmp=4,num;
字符arr[4],结果[4*strlen(字符串)];
对于(i=0;i
  • 使用
    intnum=atoi(c)
    将字符串转换为整数
  • 那就做吧

    int binary[50];
    int q = num,i=0;
    
    while(q != 0)
    {
       binary[i++] = q%2;
       q = q/2;
    }
    
  • 以相反的顺序打印二进制数组将具有二进制等价物。 完整程序:

    #include<stdio.h>
    
    
        int main(){
    
            char c[100];
            int num,q;
    
            int binary[100],i=0,j;
    
    
            scanf("%d",c);
    
            num = atoi(c);
            q = num;
    
    
            while(q!=0){
    
                 binary[i++]= q % 2;
    
                 q = q / 2;
    
            }
    
    
    
    
            for(j = i -1 ;j>= 0;j--)
    
                 printf("%d",binary[j]);
    
    
            return 0;
    
        }
    
    #包括
    int main(){
    charc[100];
    int-num,q;
    整数二进制[100],i=0,j;
    scanf(“%d”,c);
    num=原子(c);
    q=num;
    while(q!=0){
    二进制[i++]=q%2;
    q=q/2;
    }
    对于(j=i-1;j>=0;j--)
    printf(“%d”,二进制[j]);
    返回0;
    }
    
  • 使用
    intnum=atoi(c)
    将字符串转换为整数
  • 那就做吧

    int binary[50];
    int q = num,i=0;
    
    while(q != 0)
    {
       binary[i++] = q%2;
       q = q/2;
    }
    
  • 以相反的顺序打印二进制数组将具有二进制等价物。 完整程序:

    #include<stdio.h>
    
    
        int main(){
    
            char c[100];
            int num,q;
    
            int binary[100],i=0,j;
    
    
            scanf("%d",c);
    
            num = atoi(c);
            q = num;
    
    
            while(q!=0){
    
                 binary[i++]= q % 2;
    
                 q = q / 2;
    
            }
    
    
    
    
            for(j = i -1 ;j>= 0;j--)
    
                 printf("%d",binary[j]);
    
    
            return 0;
    
        }
    
    #包括
    int main(){
    charc[100];
    int-num,q;
    整数二进制[100],i=0,j;
    scanf(“%d”,c);
    num=原子(c);
    q=num;
    while(q!=0){
    二进制[i++]=q%2;
    q=q/2;
    }
    对于(j=i-1;j>=0;j--)
    printf(“%d”,二进制[j]);
    返回0;
    }
    
    main()
    中,执行以下操作之一

    char c[ ] = "12345678";
    

    如果要将
    c
    用作字符串。否则,它没有足够的空间来存储终止的空字符

    在这里,我冒昧地修改了相应的代码为您工作。检查下面的代码。希望它的自我解释

    #include <stdio.h>
    #include <string.h>
    
    void reduce(char string[]) {
            int i=0, j=0, k=0, cnt=0,  count = 0;           //count added, tmp removed
            char arr[4], result[ (4*strlen(string) )+ 1], c;    //1 more byte space to hold null
            for (i=0; i<strlen(string); i++) {
                    c = string[i];
                    count = 4;
                    while (count != 0) {                        //constant iteration 4 times baed on 9 = 1001
                            arr[j++] = '0' + (c%2);            //to store ASCII 0 or 1 [48/ 49]
                            c = c/2;
                            count--;
                    }
    /*      //not required
                    while (tmp >= 0) {
                            arr[j++] = 0;
                            tmp--;
                    }
    */
                    j--;
                    for (k=(i*4); k<((i*4) +4); k++) {
                            result[k] = arr[j--];
                    }
                    j = 0;
                    memset (arr, 0, sizeof(arr));
            }
            result[k] = 0;
            printf("The result is: %s\n", result);   //why to loop when we've added the terminating null? print directly.
    /*
            for (i=0; i< strlen(result); i++) {
                    printf("%c",result[i]);
            }
            printf("\n");
    */
    }
    
    int main() {
            char c[ ] = "12345678";
            reduce(c);
            return 0;
    }
    
    main()

    char c[ ] = "12345678";
    

    如果要将
    c
    用作字符串。否则,它没有足够的空间来存储终止的空字符

    在这里,我冒昧地修改了相应的代码为您工作。检查下面的代码。希望它的自我解释

    #include <stdio.h>
    #include <string.h>
    
    void reduce(char string[]) {
            int i=0, j=0, k=0, cnt=0,  count = 0;           //count added, tmp removed
            char arr[4], result[ (4*strlen(string) )+ 1], c;    //1 more byte space to hold null
            for (i=0; i<strlen(string); i++) {
                    c = string[i];
                    count = 4;
                    while (count != 0) {                        //constant iteration 4 times baed on 9 = 1001
                            arr[j++] = '0' + (c%2);            //to store ASCII 0 or 1 [48/ 49]
                            c = c/2;
                            count--;
                    }
    /*      //not required
                    while (tmp >= 0) {
                            arr[j++] = 0;
                            tmp--;
                    }
    */
                    j--;
                    for (k=(i*4); k<((i*4) +4); k++) {
                            result[k] = arr[j--];
                    }
                    j = 0;
                    memset (arr, 0, sizeof(arr));
            }
            result[k] = 0;
            printf("The result is: %s\n", result);   //why to loop when we've added the terminating null? print directly.
    /*
            for (i=0; i< strlen(result); i++) {
                    printf("%c",result[i]);
            }
            printf("\n");
    */
    }
    
    int main() {
            char c[ ] = "12345678";
            reduce(c);
            return 0;
    }
    

    从您的示例中可以看出,您尝试的转换是二进制编码的十进制而不是二进制。在这种情况下,您的解决方案有点过于复杂;您只需将每个数字转换为其整数值,然后将位模式转换为ASCII
    1
    0

    #include <stdio.h>
    
    void reduce( const char* c )
    {
        for( int d = 0; c[d] != 0; d++ )
        {
            int ci = c[d] - '0' ;
    
            for( unsigned mask = 0x8; mask != 0; mask >>= 1 )
            {
                putchar( (ci & mask) == 0 ? '0' : '1' )   ;
            }
        }
    }
    

    从您的示例中可以看出,您尝试的转换是二进制编码的十进制而不是二进制。在这种情况下,您的解决方案有点过于复杂;您只需将每个数字转换为其整数值,然后将位模式转换为ASCII
    1
    0

    #include <stdio.h>
    
    void reduce( const char* c )
    {
        for( int d = 0; c[d] != 0; d++ )
        {
            int ci = c[d] - '0' ;
    
            for( unsigned mask = 0x8; mask != 0; mask >>= 1 )
            {
                putchar( (ci & mask) == 0 ? '0' : '1' )   ;
            }
        }
    }
    

    您可以使用下面的reduce函数

    void reduce(char string[])
    {
        unsigned int in = atoi(string) ;
        int i = 0, result[32],k,j;
    
        while (in > 0) {
            j = in % 10; 
            k = 0;
            while (j > 0) {
                result[i++] = j % 2;
                j = j >> 1;
                k++;
            }
            while (k < 4) {
                result[i++] = 0;
                k++;
            }
            in = in/10; 
        }
        printf("Result\n");
        for(--i;i >= 0; i--) {
            printf("%d", result[i]);
        }
        printf("\n");
    
    }
    
    void reduce(字符字符串[])
    {
    无符号整数in=atoi(字符串);
    int i=0,结果[32],k,j;
    while(in>0){
    j=单位为%10;
    k=0;
    而(j>0){
    结果[i++]=j%2;
    j=j>>1;
    k++;
    }
    而(k<4){
    结果[i++]=0;
    k++;
    }
    in=in/10;
    }
    printf(“结果\n”);
    对于(--i;i>=0;i--){
    printf(“%d”,结果[i]);
    }
    printf(“\n”);
    }
    
    对于
    12345678

    输出将是000100100010100001011001111000,其中每个字符都以二进制格式打印。

    您可以使用下面的reduce函数

    void reduce(char string[])
    {
        unsigned int in = atoi(string) ;
        int i = 0, result[32],k,j;
    
        while (in > 0) {
            j = in % 10; 
            k = 0;
            while (j > 0) {
                result[i++] = j % 2;
                j = j >> 1;
                k++;
            }
            while (k < 4) {
                result[i++] = 0;
                k++;
            }
            in = in/10; 
        }
        printf("Result\n");
        for(--i;i >= 0; i--) {
            printf("%d", result[i]);
        }
        printf("\n");
    
    }
    
    void reduce(字符字符串[])
    {
    无符号整数in=atoi(字符串);
    int i=0,结果[32],k,j;
    while(in>0){
    j=单位为%10;
    k=0;
    而(j>0){
    结果[i++]=j%2;
    j=j>>1;
    k++;
    }
    而(k<4){
    结果[i++]=0;
    k++;
    }
    in=in/10;
    }
    printf(“结果\n”);
    对于(--i;i>=0;i--){
    printf(“%d”,结果[i]);
    }
    printf(“\n”);
    }
    
    对于
    12345678

    输出将是000100100010100001011001111000,其中每个字符都以二进制格式打印。

    可能需要一些调整,但它会按原样完成工作

    #include <stdio.h>
    #include <stdlib.h>
    
    int
    main(void)
    {
            int  i;
            int  n;
            char *str       = "12345678";
            const int  bit  = 1 << (sizeof(n)*8 - 1);
    
            n = atoi(str);
    
            for(i=0; i < sizeof(n)*8 ; i++, n <<= 1)
                    n&bit ? printf("1") : printf("0");
    
            return 0;
    }
    
    #包括
    #包括
    int
    主(空)
    {
    int i;
    int n;
    char*str=“12345678”;
    
    const int bit=1它可能需要一些调整,但它按原样工作

    #include <stdio.h>
    #include <stdlib.h>
    
    int
    main(void)
    {
            int  i;
            int  n;
            char *str       = "12345678";
            const int  bit  = 1 << (sizeof(n)*8 - 1);
    
            n = atoi(str);
    
            for(i=0; i < sizeof(n)*8 ; i++, n <<= 1)
                    n&bit ? printf("1") : printf("0");
    
            return 0;
    }
    
    #包括
    #包括
    int
    主(空)
    {
    int i;
    int n;
    char*str=“12345678”;
    
    const int bit=1代码中有很多小错误,这使得很难确定单个错误。主要问题似乎是您将二进制数(
    0
    1
    )与ASCII数字(
    “0”
    “1”
    )混淆,并且错误地使用了字符串函数

  • 正如其他地方提到的,
    charc[8]=..
    是错误的
  • atoi(string[i])
    无法工作;它需要的是字符串,而不是字符
  • arr[…]
    获取值
    'num%2
    ,即一个数值。最好使用
    '0'+num%2
    ,因此它是一个字符串
  • 在已递增
    k
    的循环中,在
    result[k++]
    中递增
    k
  • 在打印之前,在末尾添加
    result[k]=0;
    ,以便
    strlen
    正常工作
  • 4*strlen(result)
    太过分了--
    strlen
    就是这样
  • 您不妨执行一个简单的
    printf(“%s\n”,result);

  • 代码中有很多小错误,这使得很难确定单个错误。主要问题似乎是您将二进制数(
    0
    1
    )与ASCII数字(
    “0”
    “1”
    )和ar混淆了