mpNum2Long 多倍長整数をlong整数に変換する
int mpNum2Long(unsigned long *ul, int *num);
ul (出力)対応した符号なしlong整数 num (入力)多倍長整数
変換できなかったときは -1、OK 時は 0。
#define N 10000
int mpNum2Long(unsigned long *ul, int *num)
{
unsigned long maxUL, maxULdivN;
unsigned long x;
int *nn;
maxUL = ~0;
maxULdivN = maxUL / N;
x = 0;
for (nn = num + *num; nn != num; ) {
if (x > maxULdivN) return -1;
x *= N;
if (*nn > maxUL - x) return -1;
x += *nn--;
}
*ul = x;
return 0;
}