在Ruby中将二进制数据转换为字符串

10

我有一个包含字节数据的字符串。
如何进行原地转换为 ASCII 字符串?


1
你想看到什么类型的ASCII字符串?二进制字符串(“0101110110”),十六进制(“0AFC43”),还是只是编组成ASCII以便在其他地方解码? - Brent.Longborough
3个回答

15

另一种处理二进制数据的方法是使用String#unpack函数。


7
谢谢 - unpack('H*') 完成了工作。 - LK.
假设二进制数据是阿拉伯文本的表示形式..(我收到的文本看起来像一些无意义的字符,例如 قرآن.. 我该如何解包它以使其看起来像原始的阿拉伯文(即使用某种阿拉伯编码或其他方式)? - abbood
这个有没有 JavaScript 的等价物? - arjun

7
您可以使用Base64进行转换,这是一种相对通用的方法。
require 'base64'

str = Base64.encode64(data)

数据需要转换为字符串才能工作。例如尝试:irb(main):002:0> Base64.encode64(1234) TypeError: 无法将Fixnum转换为String - Brent.Longborough

2

如果你有一个二进制字符串,比如:

s = "01001101011011110111000101110101011001010110010101110100"

而你想在Ruby中将其转换回ASCII文本,可以这样做:

最初的回答:

s.scan(/.{8}/).map { |byte| byte.to_i(2).chr }.join

s = "01001101011011110111000101110101011001010110010101110100"

(0..s.length-8).step(8) do |i|
    print s[i,8].to_i(base=2).chr
end

希望这能帮助到某些人 :)。最初的回答:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接