質問

どのようにして、高バイトと低バイトの高エンディアン順序の六角二重ルビーフロートを/変換します。

例:

start with 99.0

タグで終わります
40 58 C0 00   00 00 00 00
high bytes    low bytes
役に立ちましたか?

解決

さて、パトリックは、の言ったようにArray\#packを使用し過ぎて変換するために多くを取ることはありません。

irb> [99.0].pack('G').split('').map { |ds| ds[0] }
#=> [64, 88, 192, 0, 0, 0, 0, 0]
irb> _.map { |d| "%02x" % d }
#=> ["40", "58", "c0", "00", "00", "00", "00", "00"]
irb> [99.0].pack('E').split('').map { |ds| ds[0] }
#=> [0, 0, 0, 0, 0, 192, 88, 64]
irb> _.map { |d| "%02x" % d }    
#=> ["00", "00", "00", "00", "00", "c0", "58", "40"]

それはあなたがゼロインデックスまたはゼロインデックス内の下位バイトで上位バイトとそれを解凍するかどうかによって異なりだからます:

      E     |  Double-precision float, little-endian byte order
      G     |  Double-precision float, network (big-endian) byte order

他のヒント

配列クラスは、パックの方法があります:

a = [99.0]
s = a.pack("d")
s
=> "\000\000\000\000\000\300X@"

このはあなたにバイト文字列が得られますが、印刷のための六角にそれから変換することは簡単である必要があります。

あなたが他の道を行くにしたい場合は、

、文字列クラスはアンパック方法があります:

s.unpack("d")
=>[99.0]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top