解析字符串中的字节码?

时间:2013-11-25 23:21:02

标签: ruby

我遇到的情况是我收到字符码的字符串,如下所示:

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

字节码中的\已被转义。我真的很喜欢这样的字符串:

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

并从中获取字节,就像我对此字符串一样:

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

如何更好地处理该字符串?

它是通过UDP从另一个系统发送的,所以我真的只能访问它,就像它到达的凌乱的转义字符串一样。

1 个答案:

答案 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.

希望在这里激发更好的答案。