hex转储到二进制 – xxd -r等效

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

$ 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 ++ Hex-Editor(插件)视图中 在此处输入图像描述

如何在Ruby中获得相同的二进制输出? 是否有任何库可以执行xxd -r -pfunction?

使用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. 
Interesting Posts