请提供一些代码,用于将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);
}
这样的东西会起作用吗?
答案 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);