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

时间:2018-01-18 12:15:40

标签: c arrays binary decimal

我想从十进制数返回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;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

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

  1. 如果你想要一个十进制值的二进制表示,最简单的方法是检查位0,然后只要它不为零就移位。向右移动一位与将其除以2相同。
  2. 如果您想要中止,则可以查看该数字是否为零,而不是检查数字是否在0到65535之间。如果您想要固定数量的班次,您也可以从1到16计算。
  3. 所以我会建议这样的事情:

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

    这将在反方向上输出0和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);
    

    别忘了free(bitmap).

    始终考虑一个数组从零开始索引。所以最好是 在16位的情况下,位编号从0到15。 我没有测试过这段代码,但它的工作方式是这样的。 :)

答案 1 :(得分:0)

这样做,函数select tmp.num as client_num, CONCAT( CASE WHEN tmp.num < 26000 THEN '' ELSE CHAR(ASCII('A') - 1 + (tmp.num / 26000)) END, CHAR (ASCII('A') + (tmp.num / 1000) % 26), RIGHT('000'+CAST(tmp.num % 1000 AS VARCHAR(3)),3)) as client_id from (select 1 as 'num' union select 10 union select 150 union select 1000 union select 25999 union select 26000 union select 27000 union select 100000) tmp 会覆盖+------------+-----------+ | client_num | client_id | +------------+-----------+ | 1 | A001 | | 10 | A010 | | 150 | A150 | | 1000 | B000 | | 25999 | Z999 | | 26000 | AA000 | | 27000 | AB000 | | 100000 | CW000 | +------------+-----------+ How do I return a char array from a function?)中的数组bin()

arr