将双引号更改为单引号

时间:2013-05-30 13:54:38

标签: ruby quotes

我正在使用Ruby开发一个项目。我正在使用的库以双引号返回一个字符串,例如:"\x00\x40"。由于字符串是双引号,因此可以转换任何可以转换为ASCII字符的十六进制。因此,当我打印时,我实际上看到:"\x00@"

我想通了,如果我使用单引号,那么字符串将以纯十六进制(无转换)打印,这就是我想要的。如何将双引号字符串更改为单引号?

我没有办法改变库中的返回类型,因为它是C扩展,我无法弄清楚返回值的位置。任何想法都非常感激。

1 个答案:

答案 0 :(得分:4)

"\x00\x40"'\x00\x40'会产生完全不同的字符串。

"\x00\x40"创建一个包含十六进制值0x000x40的2字节字符串:

"\x00\x40".length
# => 2

"\x00\x40".chars.to_a
# => ["\u0000", "@"]

'\x00\x40'创建一个包含8个字符的字符串:

'\x00\x40'.length
# => 8

'\x00\x40'.chars.to_a
# => ["\\", "x", "0", "0", "\\", "x", "4", "0"]

这是由Ruby的解析器完成的,一旦创建了字符串,就无法更改它。

但是,您可以转换字符串以获取其十六进制表示。

String#unpack将字符串解码为十六进制字符串,即它将每个字节的十六进制值作为字符串返回:

hex = "\x00\x40".unpack("H*")[0]
# => "0040"

String#gsub每2个字节添加/插入\x

hex.gsub(/../) { |s| '\x' + s }
# => "\\x00\\x40"