On Wed, Sep 23, 2009 at 17:00, Bryan R Harris <bryan_r_har...@raytheon.com> 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? snip
"h*" and "H*" have nothing to do with endianness. From the docs: h A hex string (low nybble first). H A hex string (high nybble first). Endianness occurs at the byte level, not the nybble level. -- Chas. Owens wonkden.net The most important skill a programmer can have is the ability to read. -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/