1

我正在尝试为 ruby​​ 项目构建一个带有 max/msp 的小 GUI,但我找不到正确转换从 max 接收到的数据的方法。

这是我从 ruby​​ 中的 max 收到的几个消息示例(我先发送 2,然后发送 1 0 -1 -2):

["int\x00,i\x00\x00\x00\x00\x00\x02", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\x00\x00\x00\x01", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\x00\x00\x00\x00", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\xFF\xFF\xFF\xFF", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\xFF\xFF\xFF\xFE", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]

到目前为止,我已经能够通过 String#ord 或 String#unpack 将正值转换为整数,但是使用这些方法,负整数给了我 0 值

4

1 回答 1

2

您可以#unpack使用偏移量 ('@8') 和 32 位有符号 bigendian int ('l>')轻松完成此操作

str.unpack('@8l>')

我不确定字符串的初始部分是什么意思(“int\x00,i\x00\x00”),我只是用偏移量忽略了它。如果有任何重要数据,它可能需要额外的摆弄。

于 2013-06-23T11:42:55.913 回答