ruby - 十六进制转储到二进制 - xxd -r 等效

标签 ruby hexdump

在 Linux bash shell 中,我使用以下命令将普通的十六进制转储转换为二进制

$ echo "8cd59ef53c9aaa68311b73767e0975e7" | xxd -r -p > xxd_out.bin

当我在文本查看器中打开文件时,它看起来像 ŒÕžõ<šªh1sv~ uç

或在 xxd 中

$ xxd -b xxd_out.bin
00000000: 10001100 11010101 10011110 11110101 00111100 10011010  ....<.
00000006: 10101010 01101000 00110001 00011011 01110011 01110110  .h1.sv
0000000c: 01111110 00001001 01110101 11100111                    ~.u.

或在 Notepad++ 十六进制编辑器(插件) View 中 enter image description here

如何在 Ruby 中获得相同的二进制输出?有没有可用的库可以做什么 xxd -r -p会怎么做?

最佳答案

使用Array#pack

.scan(/../) 会将 "8cd59e" 拆分为 ["8c","d5","9e"]

.map(&:hex) 会将其转换为 [0x8c, 0xd5, 0x9e]

.pack("c*") 会将其打包到 "\x8c\xd5\x9e"

echo "8cd59ef53c9aaa68311b73767e0975e7" | \
  ruby -ne 'print $_.scan(/../).map(&:hex).pack("c*")' | \
  xxd -b

输出:

00000000: 10001100 11010101 10011110 11110101 00111100 10011010  ....<.
00000006: 10101010 01101000 00110001 00011011 01110011 01110110  .h1.sv
0000000c: 01111110 00001001 01110101 11100111                    ~.u.

关于ruby - 十六进制转储到二进制 - xxd -r 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262046/

相关文章:

ruby-on-rails - Ruby:根据两个键值的组合检测散列中的重复项

ruby-on-rails - 使用 Active Record 查找数据库中的下一条记录

reverse-engineering - 如何为 Elden Ring 保存文件创建数据表

ruby - 如何打印带有前导零的十六进制数字

ruby-on-rails - 在 ruby​​ on rails 中显示表格时显示字符串类型的新行 (\n)

ruby - 在放置前按下 shift|control 键拖放对象

c - C语言的hexdump程序

linux - 获取给定函数的 hexdump

c - 我如何像UNIX中的Hexdump函数一样打印出地址

ruby-on-rails - 发出 API 请求,将响应放入 RAILS 4.0.0