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; }