我有以下文本字符串,表示应在文件中显示的十六进制字节。
str = "001104059419632801001B237100300381010A"
当我使用十六进制编辑器打开创建的文件时,我想创建一个包含上述字符串的文件,我看到相同的字节数
当我运行此脚本时
File.open("out.dat", 'w') {|f| f.write(str.unpack('H*')) }
它创建文件out.dat,当我在十六进制编辑器中打开该文件时包含该文件
5B2233303330333133313330333433303335333933343331333933363333333233383330333133303330333134323332333333373331333033303333333033303333333833313330333133303431225D
并且我希望在Hex编辑器中打开文件时的内容与文本字符串相同
001104059419632801001B237100300381010A
我该怎么做?
我希望有道理。谢谢
答案 0 :(得分:1)
首先必须将字符串按对齐的字节分隔。
str.
each_char. # enumerator
each_slice(2). # bytes
map { |h, l| (h.to_i(16) * 16 + l.to_i(16)) }.
pack('C*')
#⇒ "\x00\x11\x04\x05\x94\x19c(\x01\x00\e#q\x000\x03\x81\x01\n"
或者甚至更好:
str.
scan(/../).
map { |b| b.to_i(16) }.
pack('C*')
现在您可以使用例如将其转储到文件中。 IO#binwrite
。