【发布时间】:2013-01-12 18:15:58
【问题描述】:
这里的任何人都可以帮助我了解以下浮点指令如何在 Ruby 中使用 packing() and unpacking() 方法工作吗?
D and dF and fg and Ge and E
我在下面尝试过:
irb(main):001:0> [2,44,43].pack('D')
=> "\x00\x00\x00\x00\x00\x00\x00@"
irb(main):002:0> [2,44,43].pack('d')
=> "\x00\x00\x00\x00\x00\x00\x00@"
irb(main):004:0> [2,44,43].pack('ddd')
=> "\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00F@\x00\x00\x00\x00\x00\
x80E@"
irb(main):005:0> [2,44,43].pack('fff')
=> "\x00\x00\x00@\x00\x000B\x00\x00,B"
irb(main):006:0> [2,44,43].pack('FFF')
=> "\x00\x00\x00@\x00\x000B\x00\x00,B"
irb(main):007:0> [2,44,43].pack('ggg')
=> "@\x00\x00\x00B0\x00\x00B,\x00\x00"
irb(main):008:0> [2,44,43].pack('GGG')
=> "@\x00\x00\x00\x00\x00\x00\x00@F\x00\x00\x00\x00\x00\x00@E\x80\x00\x00\x00\x0
0\x00"
irb(main):009:0>
输出是怎么来的?这种计算的逻辑是什么?
提前致谢!
【问题讨论】:
-
documentation 的哪一部分有问题?
-
是的,他们只是展示了一些带有示例的指令,但不是我的全部列表。所以作为
ruby这个平台的新手,我真的很想知道这些究竟是如何工作的,它们的逻辑是什么? -
您是否尝试将它们与十六进制翻斗机结合使用?它们的工作方式与在 Python 和 Perl 中的工作方式相同:它们将原生类型与原始位进行转换。
-
你为什么不在
irb试试这些?你问的大多数人也不知道这些是如何工作的。找出答案的诀窍是使用irb来测试它们。那么您尝试过什么,您对这些方法有什么特别不了解的地方?您的问题范围太广。 -
简单地说:浮点数具有计算机、C 和 C++ 可以理解的二进制表示和 Ruby 可以理解的另一种表示;
pack和unpack用于在这两者之间进行转换。它们通常用于读/写二进制文件和说二进制网络协议。
标签: ruby ruby-1.9.3