c - C Char 数组中的十进制到二进制

标签 c arrays binary decimal

我想从十进制数返回 16BIT 二进制数。我有 2 个代码。
在第一个中,我尝试返回一个字符数组。
在第二个中,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);

这将以相反的方向输出 0 和 1,直到不再有 1。

如果您想要固定宽度的表示:

#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);

不要忘记释放(位图)。

始终考虑数组是从零开始索引的。所以最好 如果是 16 位,则位编号从 0 到 15。 我没有测试过这段代码,但它的工作原理是这样的。 :)

关于c - C Char 数组中的十进制到二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321129/

相关文章:

java - 我的二进制转换器的简要说明

java - long 中非零四进制(基数为 4)的位数?

c - C 中的写/读文件性能问题

c - 为什么会出现整数溢出,如何解决?

c - 如何初始化只有空格且没有垃圾的字符串?

java - 从 Java 中的扩展类 B 将字符串添加到抽象类 A 中的数组

c - 数组索引大小

php - 数组洗牌和撤消

bash - bash 脚本如何在不使用 uudecode 的情况下写出二进制文件?

c - epoll中文件描述符的返回顺序是什么?