3 Stimmen

Wie kann man in Ruby einen Wert in eine ASCII-Zeichenkette umwandeln?

Was ist der sauberste Ruby-Weg, um eine Zahl in einen ASCII-String zu konvertieren?

zum Beispiel, a = 0x68656c6c6f werden sollte a = "hello" .

In normalem C ohne Bibliotheken würde ich eine 0xFF-Maske verwenden, die ich immer wieder verschiebe. Irgendwie habe ich das Gefühl, Ruby hat kürzere/weniger explizite Wege, dies zu tun.

Ich verwende Ruby 1.8.7.

6voto

Victor Moroz Punkte 8971
["%x" % 0x68656c6c6f].pack("H*")

Update : Eine weitere verrückte Idee, die in Ihrem Fall wahrscheinlich übertrieben ist, aber sie funktioniert auch mit führenden Nullen. Eigentlich ist es nur Shift, kann aber mit verschiedenen Funktionen verwendet werden wie map , inject , each usw.

class S
  include Enumerable

  def initialize(i)
    @i = i
  end

  def each(&block)
    while @i > 0
      @i, b = @i.divmod(256)
      block[b.chr]
    end
  end
end

S.new(0x0168656c6c6f).inject{ |a, c| c + a }

5voto

Tom De Leu Punkte 7926
["68656c6c6f"].pack("H*") #=> "hello"

Werfen Sie einen Blick auf die Dokumente für Array , insbesondere die Methoden des Ein- und Auspackens.

3voto

Adiel Mittmann Punkte 1754

Ich denke, es spricht nichts dagegen, für das von Ihnen beschriebene Problem einen C-ähnlichen Code zu schreiben. Sie haben es mit Low-Level-Verarbeitung zu tun, also ist es akzeptabel, eine Low-Level-Syntax zu verwenden:

n = 0x68656c6c6f
s = ''
while n > 0
  p = n & 0xff
  n = n >> 8
  s = p.chr + s
end
puts s

Es gibt sicher Möglichkeiten, den Code mehr an Ruby anzulehnen, aber für dieses Problem halte ich es für eine gute Alternative. Wenn Sie die Zeichenfolge stattdessen in einem Array hätten, wäre es einfacher:

puts [0x68, 0x65, 0x6c, 0x6c, 0x6f].map{|n| n.chr}.reduce(:+)

1voto

siame Punkte 7967
a = "0x68656c6c6f"
a = a[2..-1] # get rid of the 0x
a.scan(/../).each { |s| puts s.hex.chr }
H
e
l
l
o

0voto

Rahul Patel Punkte 1291

Versuchen Sie dies

"0x68656c6c6f"[2..-1].gsub(/../) { |val| val.hex.chr } => "hello"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X