htond, ntohd — convert double-precision floating point numbers between host and network format and byte order
fsfunchtond( | netptr, | |
hostptr, | ||
count) ; |
netptr
;hostptr
;count
;unsigned char *netptr; unsigned char *hostptr; int count;
fsfuncntohd( | hostptr, | |
netptr, | ||
count) ; |
hostptr
;netptr
;count
;unsigned char *hostptr; unsigned char *netptr; int count;
These routines are used for conversion between the local host 64-bit ("double precision") representation, and 64-bit IEEE double precision representation, in "network order", i.e., big-endian, the MSB in byte [0], on the left.
As a quick review, the IEEE double precision format is as follows: sign bit, 11 bits of exponent (bias 1023), and 52 bits of mantissa, with a hidden leading one (0.1 binary). When the exponent is 0, IEEE defines a "denormalized number", which is not supported here. When the exponent is 2047 (all bits set), and: all mantissa bits are zero, value is infinity*sign, mantissa is non-zero, and: msb of mantissa=0: signaling NAN msb of mantissa=1: quiet NAN
Note that neither the input or output buffers need be word aligned, for greatest flexibility in converting data, even though this may impose a speed penalty on some architectures.
These subroutines operate on a sequential block of numbers, to save on subroutine linkage execution costs, and to allow some hope for vectorization.
On brain-damaged machines like the SGI 3-D, where type "double" allocates only 4 bytes of space, these routines *still* return 8 bytes in the IEEE buffer.
The VAX handles bytes backwards from most everyone else in the world. This is not expected to be fixed in the near future.