كيفية تحويل مزدوج إلى عرافة؟
سؤال
كيف أقوم بتحويل تعويم روبي / مزدوج إلى ترتيب Endian Highs مع High Bytes و Bytes منخفضة.
مثال:
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]
لا تنتمي إلى StackOverflow