使用长整数C将十进制转换为二进制

时间:2018-09-28 04:28:51

标签: c int long-integer

我的程序旨在通过从输入文件中读取值,然后将二进制值输出到输出文件中,将十进制转换为二进制。可以说输入文件具有以下数字:

190 31 5 891717742

除891717742之外,所有内容都可以很好地转换为二进制。这将输出一个与二进制输出完全不同的值。香港专业教育学院尝试过长,但他们只是输出一个负值。例如,将输出:

11000100 11110010 11 "1434923237" <- not right (not the actual binary values)

十进制转换为二进制(在线):

char* convertDecimalToBinary(int n)
{
  int binaryNumber = 0;
  int remainder, i = 1;
  static char buff[100];

    while (n!=0)
    {
        remainder = n%2;

        n /= 2;
        binaryNumber += remainder*i;
        i *= 10;
    }
    sprintf(buff, "%d", binaryNumber );
    return buff;
}

2 个答案:

答案 0 :(得分:1)

基本问题是您试图使用int来存储二进制表示形式。一个int就是那个整数。在内存中,它以二进制形式表示,但是C语法允许您在对int赋值或执行其他操作时使用基数10和基数16的文字。这可能使它看起来好像没有被视为二进制数,但实际上确实如此。在您的程序中,您混淆了以2为底的表示和以10为底的表示。 891717742(以10为底)转换为二进制是1101010010011010001000010000111110。您的算法本质上是在尝试将以10为底的数字110101001001101000100001101110存储在一个int中。以10为基数的数字甚至比64位数字还要大,实际上要花97位才能存储。

选中此答案以查看如何在C中打印出int的二进制表示形式:Is there a printf converter to print in binary format?

答案 1 :(得分:-1)

这非常容易,可以通过两个简单的步骤完成。

  1. 整数到十六进制字符串
int main()
{
    int n=891717742;
    char buff[100];
    sprintf(buff, "%x", n);
    printf("\n buff=%s", buff);
    return 0;
}
  1. 十六进制转换为二进制

请看这里 How to convert a hexadecimal string to a binary string in C