我有以下文本字符串,表示应该出现在要创建的文件中的十六进制字节。
str = "001104059419632801001B237100300381010A"
我想创建一个包含上述字符串的文件,当我使用十六进制编辑器打开创建的文件时,我看到相同的字节
当我运行此脚本时
File.open("out.dat", 'w') {|f| f.write(str.unpack('H*')) }
它会创建文件.dat当我在十六进制编辑器中打开此文件时,它包含此
5B2233303330333133313330333433303335333933343331333933363333333233383330333133303330333134323332333333373331333033303333333033303333333833313330333133303431225D
我希望在十六进制编辑器中打开文件时的内容与文本字符串相同
001104059419632801001B237100300381010A
我该怎么做?
我希望有道理。谢谢
首先,您必须按对齐的字节拆分字符串。
str.
each_char. # enumerator
each_slice(2). # bytes
map { |h, l| (h.to_i(16) * 16 + l.to_i(16)) }.
pack('C*')
#⇒ "x00x11x04x05x94x19c(x01x00e#qx000x03x81x01n"
或者,甚至更好:
str.
scan(/../).
map { |b| b.to_i(16) }.
pack('C*')
现在你可以使用例如 IO#binwrite
.