2013-11-25 104 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. 

只是希望在这里启发更好的答案。