【问题标题】:Changing Double Quotes to Single将双引号更改为单引号
【发布时间】:2013-05-26 03:28:52
【问题描述】:

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

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

我没有任何方法可以更改库中的返回类型,因为它是 C 扩展,我无法确定返回值的来源。任何想法都非常感谢。

【问题讨论】:

  • 这适用于字符串 litterals,表示在您的源代码中找到的字符串。一旦被 ruby​​ 引擎解析,所有字符串都是相等的,因此您的问题看起来很奇怪。如果要返回转义序列,还可以转义双引号字符串中的反斜杠。
  • 转义反斜杠有效,但我看不到任何方法可以使用返回的数据。
  • 好吧,请改进您的问题,因为现在还不够精确,无法清楚地理解。一些代码可能也会有所帮助。

标签: ruby quotes


【解决方案1】:

"\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"

【讨论】:

  • 优秀的答案!我的问题是 - 你如何在这里实现? :) 真的感到自豪。在我看到这个答案之前,我从来没有想过会有这样的区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 2019-05-17
  • 2019-10-04
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多