我遇到的情况是我收到字符码的字符串,如下所示:
"\\x00\\x00\\xff\n"
字节码中的\
已被转义。我真的很喜欢这样的字符串:
"\\x00\\x00\\xff\n"
并从中获取字节,就像我对此字符串一样:
"\x00\x00\xff".bytes # => [ 0, 0, 255 ]
如何更好地处理该字符串?
它是通过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.
希望在这里激发更好的答案。