十进制到二进制转换

时间:2011-06-21 13:06:17

标签: c

我需要使用C编程将20位十进制转换为二进制。我将创建什么缓冲区,因为它会非常大,即使计算器也无法计算将20位数转换为二进制数。

这是我打算完成的样本:

我们假设这段代码: 我通过键盘将此值输入缓冲区。同时,我使用的是AT85C55WD Mcu。

unsigned char idata token [20] =(2,3,5,6,3,3,4,4,3,2,4,4,6,7,4,3,4,5,3, 3);

我想要一个结果

type-define variable convrt_token = 23562244324467434533;

使用C可以吗?如果是的话,那我该怎么办呢?

3 个答案:

答案 0 :(得分:2)

十进制中的每个数字都有10个值,0..9。所以你需要二进制3到4位数。所以让我们说4来保持简单。

所以对于20位小数,你需要一个二进制的80位数字。

你可以使用字符来完成所有操作以保持简单。我认为这是为了好玩。

char decnum [20]; char binnum [80];

祝你好运。

答案 1 :(得分:1)

开始时Gidon提到。然后你只需要定义一个函数'decToBin'或类似的东西,你可以像这样使用:

char decnum[20];  
char binnum[80];  

// ... get the values, do zero initialization etc...  
decToBin( decnum, binnum );  

你准备好了。
decToBin函数可以很容易地实现为常见的长除法算法。这应该不会太难 玩得开心;)

编辑:详细说明:

  1. 看看你的最后一位数字。它可以被2整除吗? - >是的:你的二进制数字是0 - >不:你的二进制数字是1

  2. 将整个十进制数除以2(最好是长除法)和截断(如有必要)。

  3. 重新开始。您将以相反的顺序获得二进制数字。 (重复直到您的十进制数为0)

答案 2 :(得分:1)

这是优雅的解决方案.... :)

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<unistd.h>
#include<assert.h>
#include<stdbool.h>
#define max 10000
#define RLC(num,pos) ((num << pos)|(num >> (32 - pos)))
#define RRC(num,pos) ((num >> pos)|(num << (32 - pos)))

void tobinstr(int value, int bitsCount, char* output)
{
    int i;
    output[bitsCount] = '\0';
    for (i = bitsCount - 1; i >= 0; --i, value >>= 1)
      {
             output[i] = (value & 1) + '0';
      }
}


  int main()
   {
    char s[50];
    tobinstr(65536,32, s);
    printf("%s\n", s);
    return 0;
   }