From: Francis Cianfrocca Date: 2006-09-23T00:56:04+09:00 Subject: Re: 64-bit integers in network byte-order On 9/22/06, Francis Cianfrocca wrote: > All, > does Ruby have a way to convert 64-bit integers to and from network > order in a platform-independent way? > > For 32-bit ints, I can use [value].pack("N"). The conversion operator > for 64-bit ints ("Q") doesn't have a network-order variant. (I assume > this is because the underlying byte-order converters (htons/htonl) don't > have a 64-bit version on 32-bit platforms.) > Thanks, guys. I sort of figured I'd have to hack it. Ara, I thought of your approach (detecting endian-ness locally) but really hoped I could avoid it! (Ghostbusters: "I feel so funky.") Combining your approach with Dave's (and passing both through several additional processing stages), I end up with: #-------------------------------------- BigEndian = [1].pack("s") == [1].pack("n") def htonq value BigEndian ? val : ([val].pack("Q").reverse.unpack("Q").first) end #-------------------------------------- and of course ntohq is identical to htonq.