0

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

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

我没有任何方法可以更改库中的返回类型,因为它是 C 扩展,并且我无法弄清楚该值是从哪里返回的。任何想法都非常感谢。

4

1 回答 1

5

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

"\x00\x40"创建一个带有十六进制值的 2 字节字符串,0x00并且0x40

"\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\x每 2 个字节添加/插入:

hex.gsub(/../) { |s| '\x' + s }
# => "\\x00\\x40"
于 2013-05-30T14:47:57.390 回答