我正在使用Ruby开发一个项目。我正在使用的库以双引号返回一个字符串,例如:"\x00\x40"
。由于字符串是双引号,因此可以转换任何可以转换为ASCII字符的十六进制。因此,当我打印时,我实际上看到:"\x00@"
。
我想通了,如果我使用单引号,那么字符串将以纯十六进制(无转换)打印,这就是我想要的。如何将双引号字符串更改为单引号?
我没有办法改变库中的返回类型,因为它是C扩展,我无法弄清楚返回值的位置。任何想法都非常感激。
答案 0 :(得分:4)
"\x00\x40"
和'\x00\x40'
会产生完全不同的字符串。
"\x00\x40"
创建一个包含十六进制值0x00
和0x40
的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"