2017-02-15 2 views
1

В Linux Баш оболочки, я использую следующие преобразовать обычный шестнадцатеричный дамп в двоичныйшестнадцатеричный дамп в двоичную - XXD -r эквивалент

$ 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 ++ шестигранной Editor (плагин) зрения enter image description here

Как я могу получить один и тот же двоичный вывод в Ruby? Есть ли какая-нибудь библиотека, которая делает то, что сделает xxd -r -p?

ответ

3

использование 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. 
+0

или [my_hex_string] .pack ('H *') – peter

Смежные вопросы