64-bit integer conversion support
tg at swox.com
Fri Apr 27 21:07:45 CEST 2007
I am developing a bigint library, which will have GMP as one of it's
implementation. I'd like to provide functions for converting between 64-bit
integer (both signed and unsigned) and bigint. The problem is that GMP's
integer conversion functions do not seem to support 64-bit integers (that
is, when long type is not 64-bit).
True, since there was no 64-bit integer type until C99 came along.
I can do something similar to what mpz_get_si does, only use more limbs if
needed, but this approach depends on GMP internal representation, which I
don't quite like.
Also there are import/export functions, but as I understand they are for
different purpose - it's just binary serialization, not conversion to
natively supported type.
So, the question is - what are the available options if I want to achieve
maximum portability, and performance is not critical here?
I'd use mpz_getlimbn if I were you. A my_mpz_get_ull based on
mpz_getlimbn would be just a few lines of code, at least if you just
want to support this for a 32-bit and 64-bit ABI, and assume the numb
size is 32 or 64 bits.
More information about the gmp-discuss