ruby - 从表示 Ruby 中十六进制字节的文本字符串写入二进制文件
问题描述
我有以下文本字符串,它表示应该出现在要创建的文件中的十六进制字节。
str = "001104059419632801001B237100300381010A"
我想创建一个包含上述字符串的文件,当我用十六进制编辑器打开创建的文件时,我看到相同的字节
当我运行这个脚本
File.open("out.dat", 'w') {|f| f.write(str.unpack('H*')) }
它创建文件 out.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*')
#⇒ "\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*')
现在您可以使用 eg 将其转储到文件中IO#binwrite
。
推荐阅读
- css - 延迟加载我的网络字体
- autodesk-forge - 关闭 DockingPanel 时添加回调函数
- python - Kivy RecycleView 中的行重复
- regex - 尝试使用 REGEX 删除前导零和空格
- javascript - Javascript函数参数有问题
- reactjs - 将文件作为道具
- html - css 计数器和自定义组件(没有 shadow dom)
- aspnetboilerplate - 如何删除设置?或直接访问设置表?
- r - 将悬停效果(例如工具提示)添加到一个(大)绘图表?
- browser - 如何将 Brave 设置为 Visual Studio Code 的 Live Server 的默认浏览器?