преобразовать десятичный массив (str) в двоичный массив (байты) - PullRequest
1 голос
/ 06 января 2010

Пожалуйста, предоставьте некоторый код для преобразования массива char [] десятичных значений в массив байтов для большого целого значения в 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);
}

Нет, это не просто длинное значение, это действительно значение большого целого, может ли кто-нибудь дать простое десятичное число в байтах (двоичная логика преобразования, я заменю intс моими реализациями bigint и операторами bigint (add, mult) и т.

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 голосов
/ 06 января 2010

Звучит так, будто вы ищете решение, в котором вы выполняете арифметику низкого уровня самостоятельно.

Рассматривали ли вы использование существующего пакета bignum, такого как GNU Multi Precision Aрифметическая библиотека ? Довольно легко преобразовать существующий код, как только вы это сделаете. Например, этот код:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...