Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将十六进制打印为ASCII_Ruby_String_Hex_Ascii - Fatal编程技术网

Ruby 将十六进制打印为ASCII

Ruby 将十六进制打印为ASCII,ruby,string,hex,ascii,Ruby,String,Hex,Ascii,我有一个字符串密码,其中包含 \x79\x6F\x75\x63\x61\x6E\x74\x68\x61\x78\x6D\x65 我想把它们打印成ASCII字符。我创建这个字符串是通过获取十六进制字符并在其前面添加\x输入(密码)不起作用。然而,当我做一些类似的事情时: shellcode = "\x65\x61" puts(shellcode) 它很好用。我做错了什么?字符串在Ruby中是一种奇怪的野兽,在Ruby 1.9中它们的处理方式发生了微妙的变化,这让事情变得有些复杂 如果您使用单引

我有一个字符串
密码
,其中包含

\x79\x6F\x75\x63\x61\x6E\x74\x68\x61\x78\x6D\x65
我想把它们打印成ASCII字符。我创建这个字符串是通过获取十六进制字符并在其前面添加
\x
<代码>输入(密码)不起作用。然而,当我做一些类似的事情时:

shellcode = "\x65\x61"
puts(shellcode)

它很好用。我做错了什么?

字符串在Ruby中是一种奇怪的野兽,在Ruby 1.9中它们的处理方式发生了微妙的变化,这让事情变得有些复杂

如果您使用单引号创建了该字符串,并且该字符串来自其他来源(例如DB),那么如果您
inspect
它,您将看到:

"\\x79\\x6F\\x75\\x63\\x61\\x6E\\x74\\x68\\x61\\x78\\x6D\\x65"
您可以通过少量列表处理来处理该问题:

s.scan(/\\x(..)/).map{|a| a.first.to_i(16).chr}.join
# => "youcanthaxme" 
解释:

  • 我们通过在
    \\x
    扫描(/\\x(..)/)
    )后提取两个字符来提取各个组件:
    [[“79”]、[“6F”]、[“75”]、[“63”]、[“61”]、[“6E”]、[“74”]、[“68”]、[“61”、[“78”]、[“6D”]、[“65”]

  • 对于列表中的每个元素(
    map
    ),我们将其转换为一个整数(
    a.first.to_int(16)
    ):
    [121、111、117、99、97、110、116、104、97、120、109、101]

  • 然后我们找到对应于该ascii值的ascii字符(
    chr
    ):
    [“y”、“o”、“u”、“c”、“a”、“n”、“t”、“h”、“a”、“x”、“m”、“e”]

  • 然后我们把他们都加入到一起:
    “youcanthaxme”


  • 你就是那个人!非常感谢你。这是我最难过的时候。