将长整数值的十进制转换为二进制 C

Converting Decimal to Binary with long integer values C

我的程序旨在通过从输入文件读取值然后将二进制值输出到输出文件来将十进制转换为二进制。假设输入文件有这些数字:

190 31 5 891717742

除 891717742 外,所有内容都可以很好地转换为二进制。这将输出一个完全不同于二进制输出的值。我尝试了 LONG,但它们只是输出负值。例如这将输出:

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;
}

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

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

这很简单,只需两个简单的步骤即可完成。

  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