2013-06-23 18 views
1

紅寶石我試圖建立與最大/ MSP的Ruby項目 一點GUI我無法找到一個方法來正確地轉換我收到的形式最大的數據。最大/ MSP通過UDP報文格式

這裏是,我從最大值在紅寶石接收已經消息的幾個例子(我發送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"]] 

到目前爲止我已經能夠通過字符串#ord或String#解壓縮整數爲整數解壓縮,但使用這些方法負整數給我0值

+0

有什麼問題,我沒有得到...請分享您的代碼。 –

+0

我只是想知道如何第一部分轉換的消息(「INT \ X00,I \ X00 \ X00 \ XFF \ XFF \ XFF \ XFF」),以整數的紅寶石,你知道該怎麼做? – szymanowski

+0

這是否是你想要的?「int \ x00,i \ x00 \ x00 \ x00 \ x00 \ x00 \ x02」.ord #=> 105'? –

回答

2

您可以輕鬆地使用#unpack,使用offset('@ 8')和32位帶符號bigendian INT( 'L>')

str.unpack('@8l>') 

我不確定字符串的初始部分是什麼意思(「int \ x00,i \ x00 \ x00」),我剛剛用offset來忽略它。如果有重要的數據,它可能需要額外的擺弄。