2014-03-05 21 views
0

OK,最後從我的問題 - 假設我有以下數據結構:寫入特定的數據類型來管在Ruby中

byte length 
byte message_code 
byte[] payload 

它是每個數據位是它的正確的數據類型時非常重要寫在管道上;我怎麼能保證我的數據數組(在Ruby中是這樣):

data = [ 15, 0, .... ] # the ... indicates the payload 

被寫成單個字節 - 即,15寫爲一個字節,而不是兩個字符(即「1」和'5')?

目前,我的數據正在被轉換爲一個字符串,然後寫入,這意味着15不是寫成15,而是'1'和'5'的單個字符。這意味着,在管道,它提出這樣的:

"1, 5, 0, 4, 1, 2, 1, 0, 4" (notice that the 1 is an individual character instead of being a part of 15) 

,而不是

150412104 (etc) 

得益於開放的阿加西,我完成的代碼如下所示:

data = [ 15, # message code + payload size 
    0, # message code 
    4, # protocol version 
    12, # size of string 
] 

data.concat('hello, world'.bytes.to_a) 
p data 
packed_data = data.pack 'c*' # Convert the data into a string containing 8-bit unsigned characters 
+0

請你能發佈一個清晰的輸入例子和相應的預期輸出嗎? – toro2k

+0

已經做了 - 輸入是15,0,4,12,104(每個逗號分隔表示一個新的字節),但輸出是'1,5,0,4,1,2,1,0,4' –

+0

輸入是一個數組,即'[15,0,4,12,104]',還是一個字符串?對於此輸入,您期望的輸出是「1,5,0,4,1,2,1,0,4」,「15,0,4,12,104」或「150412104」? – toro2k

回答

1

隨着幫助此answer - 使用Array#packString#unpack轉換爲二進制表示和從二進制表示轉換。

+0

而且我們有一個贏家.. 請參閱操作更新 –