从表示 Ruby 中十六进制字节的文本字符串写入二进制文件



我有以下文本字符串,表示应该出现在要创建的文件中的十六进制字节。

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 .

最新更新