| www.delorie.com/gnu/docs/gmp/gmp_41.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
mpz_t variables can be converted to and from arbitrary words of binary
data with the following functions.
The parameters specify the format of the data. count many words are read, each size bytes. order can be 1 for most significant word first or -1 for least significant first. Within each word endian can be 1 for most significant byte first, -1 for least significant first, or 0 for the native endianness of the host CPU. The most significant nails bits of each word are skipped, this can be 0 to use the full words.
There are no data alignment restrictions on op, any address is allowed.
Here's an example converting an array of unsigned long data, most
significant element first and host byte order within each value.
unsigned long a[20]; mpz_t z; mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); |
This example assumes the full sizeof bytes are used for data in the
given type, which is usually true, and certainly true for unsigned long
everywhere we know of. However on Cray vector systems it may be noted that
short and int are always stored in 8 bytes (and with
sizeof indicating that) but use only 32 or 46 bits. The nails
feature can account for this, by passing for instance
8*sizeof(int)-INT_BIT.
The parameters specify the format of the data produced. Each word will be size bytes and order can be 1 for most significant word first or -1 for least significant first. Within each word endian can be 1 for most significant byte first, -1 for least significant first, or 0 for the native endianness of the host CPU. The most significant nails bits of each word are unused and set to zero, this can be 0 to produce full words.
The number of words produced is written to *count. rop
must have enough space for the data, or if rop is NULL then a
result array of the necessary size is allocated using the current GMP
allocation function (see section 14. Custom Allocation). In either case the return
value is the destination used, rop or the allocated block.
If op is non-zero then the most significant word produced will be
non-zero. If op is zero then the count returned will be zero and
nothing written to rop. If rop is NULL in this case, no
block is allocated, just NULL is returned.
There are no data alignment restrictions on rop, any address is allowed. The sign of op is ignored, just the absolute value is used.
When an application is allocating space itself the required size can be
determined with a calculation like the following. Since mpz_sizeinbase
always returns at least 1, count here will be at least one, which
avoids any portability problems with malloc(0), though if z is
zero no space at all is actually needed.
numb = 8*size - nail; count = (mpz_sizeinbase (z, 2) + numb-1) / numb; p = malloc (count * size); |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |