将char数组中的数字字符转换为二进制字符

converting number characters in a char array to binary

本文关键字:转换 二进制字符 数字字符 char 数组      更新时间:2023-10-16
char *toBin(unsigned long long num)
{
  char s[9999];
  const int size= 9999;
  char *temp = new char[size];
  int i, j;
  int binBase = 2;
  for(i=0; num!= 0; i++)
  {
      s[i] = num % binBase + '0';
      num /= binBase;
  }//get backwards binary
  for(j=0; i>=0; j++)
  {
      i--;
      temp[j]=s[i];
  }//reverse binary sequence
  //increments one more so need to decrement
  temp[--j] = '';
  return temp;
  delete temp;
}

如果我在char数组中有"82",我首先将"82"转换为十进制82,并将82赋给上面的函数以转换为二进制。这只能在一定的位数范围内工作。

我认为我的问题是,无符号长-长只能容纳一定数量的数字,所以当它超过这个限制时,一些随机的东西会发送到函数,它会打印出错误的二进制文件。

上面的函数将无符号长整型num转换为二进制。我意识到,更好的方法是查看char数组中的每个字符,而不是先将其转换为数字,然后使用这些值转换为二进制。然而,我很难把它写进代码中。如有任何建议或帮助,我们将不胜感激。

GNU多精度(GMP(库具有在任何基数中打印任何大小数字的功能。以下是一个示例。

#include <iostream>
#include <gmpxx>
int main()
{
    std::string numstr = "1234123412341234123412341234";
    // initialize mpz_class to have numstr in it (given in base 10)
    mpz_class bigint(numstr, 10);
    // convert to binary (base 2)
    std::string binstr = bigint.get_str(2);
    std::cout << numstr << " -> " << binstr << std::endl;
    return 0;
}

程序输出

1234123412341234123412341234 -> 111111110011010111110011000011110100100000101001110100011000000101000011000000000111110010
  • 在堆栈上分配9999个char的数组是不明智的,因为它对您的平台来说可能太大了。无论如何,您可以很容易地计算出所需的最大位数(+终止符(:CHAR_BIT*sizeof num+1
  • 此外,没有必要在堆上分配相等的数量
  • 不要害怕指针:
    • 初始化指向最后一个字节的指针
    • 将其设置为零
    • 将从最小数字开始的所有数字相加(至少一个,即使数字为0(
    • 返回已完成编号的副本