十进制转二进制

14

我有一个数字,希望在C语言中将其转换为二进制(从十进制)。

我希望我的二进制始终为5位(十进制永远不会超过31)。我已经有一个手动通过除法实现的函数,但很难将其填充到5位。

是否有更简单的方法?也许使用位移操作?

我还希望以char *的形式表示二进制。

12个回答

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

char numstr[9024];
int i = 0;

void format(int n, int base);
void printreverse(char *s);

int main()
{
     int testnum = 312;    // some random test number
     format(testnum, 2);   // 2 for binary
     printreverse(numstr);
     putchar('\n');

     return 0;
}

void format(int n, int base)
{
    if (n > 0) {
        char tmp = (n % base) + '0';
        numstr[i++] = tmp;

        // If we put this above other two we don't need printreverse,
        // But then we will have unwanted results in other places of numstr if we can't reset it

        format(n/base, base); 
    } else
        numstr[i] = '\0'; // terminating character
}

void printreverse(char *s)
{
    long len = strlen(s);
    while (len-->0)
        putchar(s[len]);
}

0

我的看法:

char* to_bitstring(uint32_t val, char buffer[], int size) {
    buffer[--size] = 0;
    while (size > 0) {
        buffer[--size] = (val % 2 ? '1' : '0');
        val = val >> 1;
    }

    return buffer; /* convenience */
}

这将向缓冲区写入SIZE个字符:

char buffer[17];
printf("%s\n", to_bitstring(42, buffer, sizeof(buffer)));

并将打印:

0000000000101010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接