将十进制数组(str)转换为二进制数组(字节)

时间:2010-01-06 07:47:49

标签: c

请提供一些代码,用于将char []数组的十进制值转换为bytes数组,以获取c中的大整数值。

如何将以下代码转换为大数组的十进制值,例如我将结果作为长字节数组?

static int dec2bin (char inbuf[], int num_convert)
{
  char ctemp;
  int result, power;

  num_convert--; /* index of LS char to convert */
  result = 0;
  power = 1;
  while (num_convert >= 0)
  {
    ctemp = inbuf[num_convert--]; /* working digit */
    if (isdigit(ctemp))
    {
      result += ((ctemp-'0') * power);
      power *= 10;
    }
    else
      return(0); /* error: non-numeric digit detected */
  }
  return (result);
}

不,它不仅仅是长值,它实际上是一个大的整数值,任何人都可以给出一个简单的dec到字节(二进制转换逻辑,我将用我的bigint实现和bigint运算符(add,mult)等替换int。 ,

塞缪尔是对的!

提前致谢。

例如,我可以将以上内容替换为

static int dec2bin (char inbuf[], bigint num_convert) 
{ 
  char ctemp; 
  bigint result, power; 

  num_convert--; /* index of LS char to convert */ 
  result = 0; 
  power = 1; 
  while (num_convert >= 0) 
  { 
    ctemp = inbuf[num_convert--]; /* working digit */ 
    if (isdigit(ctemp)) 
    { 
      result = bi_add(result ,(bi_mult((ctemp-'0'), power)); 
      power = bi_mult(power , 10); 
    } 
    else 
      return(0); /* error: non-numeric digit detected */ 
  } 
  return (result); 
} 

这样的东西会起作用吗?

1 个答案:

答案 0 :(得分:0)

听起来你正在寻找一种自己进行低级算术的解决方案。

您是否考虑使用现有的bignum套餐,例如GNU Multi Precision Arithmetic library?一旦有了这些代码,转换现有代码非常容易。例如,此代码:

result += ((ctemp-'0') * power);
power *= 10;

变为:

mpz_t tmp;
mpz_init(tmp);
mpz_mul_ui(tmp, power, ctemp - '0');
mpz_add(result, result, tmp);
mpz_clear(tmp);

mpz_mul_ui(power, power, 10);