Вы можете сделать это в оболочке, используя GNU echo
:
$ /bin/echo -n -e "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\xff\x00\xff\xff\xff\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b" > foo.gif
$ identify foo.gif
foo.gif GIF 1x1 1x1+0+0 8-bit PseudoClass 2c 36B 0.000u 0:00.000
Вы также можете использовать команду xxd
, которая будет "сделать hexdump или сделать наоборот ".Досадно, однако, что он кажется очень требовательным к формату ввода.Вот пример использования xxd
:
$ cat > mygif.hex <<END
0000000: 4749 4638 3961 0100 0100 80ff 00ff ffff
0000010: 0000 002c 0000 0000 0100 0100 0002 0244
0000020: 0100 3b0a
END
$ xxd -r < mygif.hex > mygif.gif
gvim
имеет интерфейс к xxd
.Используйте пункт меню «Инструменты → Преобразовать в шестнадцатеричное» (клавиатура: :%!xxd
), а затем «Инструменты → Преобразовать назад» (:%!xxd -r
).
EMACS также имеет встроенный редактор шестнадцатеричных символов, которыйдоступ M-x hexl-mode
(см. Редактирование двоичных файлов в руководстве).Это также немного раздражает, потому что вы должны набрать C-M-x
(т.е. Ctrl-Meta-X) перед вводом символа с помощью его шестнадцатеричного кода:
Конечно,очень просто написать простую C-программу для преобразования:
#include <stdio.h>
int main(int argc, char **argv) {
unsigned int c;
while (1 == scanf("%x", &c))
putchar(c);
return 0;
}
использование:
$ gcc -Wall unhexify.c -o unhexify
$ echo "47 49 46 38 39 61 01 00 01 00 80 ff
00 ff ff ff 00 00 00 2c 00 00 00 00
01 00 01 00 00 02 02 44 01 00 3b" | ./unhexify > mygif.gif
Также: много ответов здесь в этом коде вопрос о гольфе .