繁体   English   中英

C字符数组中的十进制到二进制

[英]Decimal To Binary in C Char Array

我想从十进制数返回16BIT二进制。 我有2个密码。
在第一个中,我尝试返回一个char数组。
在第二个中,a具有输出,但输出顺序相反。
也许有人来看看代码。 谢谢

输出优先功能:Þ0000000000010000es(x862uÿ¼×

#include <stdio.h>
#include <stdlib.h>

const int BIT = 16;

void binary(int);
char *bin(int);


int main() {

    binary(16);
    printf("\n");
    printf("%s\n", bin(16));

    return 0;
}


char *bin(int x) {

    char * new = (char*)malloc(sizeof(char) * BIT + 1);
    new[BIT] = '\0';

    if (x >= 0 && x <= 65535) {
        for (int i = 0; i < BIT; i++) {
            if (x % 2 == 0) {
                new[BIT - i] = '0';
            } else {
                new[BIT - i] = '1';
            }
            x = x / 2;
        }
    }

    return new;
}


void binary(int x) {

    if (x >= 0 && x <= 65535) {
        for (int i = 0; i < BIT; i++) {
            if (x % 2 == 0) {
                printf("0");
            } else {
                printf("1");
            }
            x = x / 2;
        }
    }
}

我试着回答你的问题。 我对任何拒绝我投票的人都不感兴趣...所以我尽力了!

  1. 如果要用十进制值的二进制表示形式,最简单的方法是检查位0,然后将其移位(只要它不是零)。 向右移一位等同于将其除以2。
  2. 如果您要中止,则只需查看数字是否为零就可以检查数字是否在0到65535之间。 如果要固定班次,也可以从1到16计数。

所以我建议这样的事情:

do {
   if (number & 1) {
       printf("1");
   } else {
       printf("0");
   }
   number >>= 1;
} while(number);

这将以相反的方向输出零和一,直到不再有一个。

如果要固定宽度的表示形式:

#define BITS 16

for (int bits = 0; bits < BITS; bits++) {
  if (number & 1) {
       printf("1");
   } else {
       printf("0");
   }
   number >>= 1;
}

如果要将其存储到数组中,请用以下命令替换printf

char *bitmap = (char*)malloc(BITS+1);
bitmap[BITS] = '\0';  // NULL termination

bitmap[BITS-1-bits] = '1';

要么

bitmap[BITS-1-bits] = '0';

分别有

printf("%s\n", bitmap);

不要忘记free(bitmap).

始终考虑,数组是从零开始的索引。 因此,对于16位,最好将位编号从0改为15。 我尚未测试此代码,但它的工作原理如下。 :)

这可以正常工作,函数bin()覆盖main()数组arr如何从函数返回char数组? ):

#include <stdio.h>
#include <stdlib.h>

const int BIT = 16;

void binary(int);
void bin(char*, int);


int main(int argc, char* argv[]) {

    int x ;

    x = atoi(argv[1]);

    char arr[BIT+1];

    //binary(16);

    bin(arr, x);   // functions overwrites array arr

    arr[BIT] = '\0';   // strings have to be null-terminated in C

    printf("%s \n", arr);

    return 0;
}

void bin(char *arr1,int x) {


    if (x >= 0 && x <= 65535)
      {
        for (int i = BIT-1; i >= 0; i--) 
              {
            if (x % 2 == 0) 
                  {
                    arr1[i] = '0';
                  } else 
                  {
                    arr1[i] = '1';
                  }
            x = x / 2;
               }

      }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM