我正在用 Ruby 开发一个项目。我正在使用的库返回双引号中的字符串,例如:"\x00\x40"
. 由于字符串用双引号括起来,任何可以转换为 ASCII 字符的十六进制都会被转换。因此,当我打印时,我实际上看到:"\x00@"
.
我发现,如果我使用单引号,那么字符串将以纯十六进制打印(无需转换),这就是我想要的。如何将双引号字符串更改为单引号?
我没有任何方法可以更改库中的返回类型,因为它是 C 扩展,并且我无法弄清楚该值是从哪里返回的。任何想法都非常感谢。
"\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"