develooper Front page | perl.beginners | Postings from September 2009

Re: decimal to binary?

Thread Previous | Thread Next
John W. Krahn
September 23, 2009 14:24
Re: decimal to binary?
Message ID:
Bryan R Harris wrote:
> John W. Krahn wrote:
>> Bryan R Harris wrote:
>>> I need to convert a number like this:   -3205.0569059
>>> ... into an 8-byte double (big and little endian), e.g. 4f 3e 52 00 2a bc 93
>>> d3  (I just made up those 8 byte values).
>>> Is this easy in perl?  Are long and short ints easy as well?
>> $ perl -le'print unpack "H*", pack "d", -3205.0569059'
>> e626c5221d0aa9c0
> Maybe this is just my own ignorance on big-endian vs. little endian, but
> this code:
>   print "big-endian:     ", unpack("H*", pack("d", -3205.0569059)), "\n";
>   print "little-endian:  ", unpack("h*", pack("d", -3205.0569059)), "\n";
> prints:
>   big-endian:     e626c5221d0aa9c0
>   little-endian:  6e625c22d1a09a0c
> ... when I expected the little endian to look more like:
>   c0 a9 0a 1d 22 c5 26 e6   (spacing for readability)
> Did I do it wrong (i.e. is "h*" the wrong string?), or am I confused on how
> big vs. little endian works?

The difference between 'h' and 'H' has nothing to do with endianness:

perldoc -f pack
[ SNIP ]
                    h   A hex string (low nybble first).
                    H   A hex string (high nybble first).

A nybble is half of a byte so the only thing exchanged is the order of 
each byte's two halves.

AFAIK floating point numbers don't have endianness (but I may be wrong.)
(Besides, in the above example, endianness would be on the pack('d') 
side of the equation.)

The programmer is fighting against the two most
destructive forces in the universe: entropy and
human stupidity.               -- Damian Conway

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About