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