2013-11-25 105 views
3

我有哪裏我收到的字節碼字符串看起來像這樣的情況:從字符串解析字節碼?

"\\x00\\x00\\xff\n" 

凡在字節碼\已經逃走了。我真的很想把這樣一個字符串:

"\\x00\\x00\\xff\n" 

,並從中獲得字節像我會爲這個字符串是這樣的:

"\x00\x00\xff".bytes # => [ 0, 0, 255 ] 

我怎樣才能更好地處理該字符串?

它通過UDP從另一個系統發送,所以我真的只能訪問它像一個亂七八糟的轉義字符串,就像它到達。

+1

UDP對字符串的格式沒有任何影響。它在交付可靠性方面有很大的差異,但內容保證與發送的內容相同。 –

+0

我想我是爲了抵禦不可避免的評論「爲什麼你首先有這樣一個字符串」,所以我把我的藉口放在了前面。 –

回答

1

有可能是一個更優雅的方式,但這應該讓你開始:

a= "\\x00\\x00\\xff\n" 
a.scan(/\\x([0-9a-f][0-9a-f])/).flatten.collect{|x| x.to_i(16)} # => [ 0, 0, 255 ] 

to.i(16)將從十六進制字符串轉換爲十進制。

看起來你正在尋找內插轉義序列。

我知道這可以使用eval完成,但是不需要。我認爲這也可以通過YAML完成。

eval("\"#{a}\"").strip.bytes.to_a # => [ 0, 0, 255] # don't use this. 

只是希望在這裏啓發更好的答案。