На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 21.05.2012 22:36
Необходимо имеющую строку в hex, например "4c4e4", перевести в бинарный вид.
И обратно, например "111101011001" в hex.
Начал делать простой заменой
и т.д. но мне кажется это совершенно плохой идеей.
Утилиты bc, dc использовать нельзя.
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 21.05.2012 23:01
gnu bc — чуть лучшая идея·
$ echo 'obase=2;ibase=16;4E4E4' | bc
1001110010011100100
$ echo 'obase=16;ibase=2;111101011001' | bc
F59
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 22.05.2012 01:22
Не совсем полное решение по переводу Hex>Binary без участия bc.
printf '\x4c4e4cc13' | xxd -b
Код: Выделить всё
0000000: 01001100 00110100 01100101 00110100 01100011 01100011 L4e4cc
0000006: 00110001 00110011 13
Буду благодарен если подскажите как правильно выбрать и склеить часть с бинарным кодом. Выбирать через разделитесль " " не вариант т.к. строка динамическая и мы не знаем когда она закончится.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 22.05.2012 08:04
Grih65kop писал(а): ↑ 21.05.2012 22:36
еобходимо имеющую строку в hex, например "4c4e4", перевести в бинарный вид.
Код: Выделить всё
#!/bin/sed -rf
s/0/0000/g
s/1/0001/g
s/2/0010/g
...
s/f/1111/gi
Grih65kop писал(а): ↑ 22.05.2012 01:22
Не совсем полное решение по переводу Hex>Binary без участия bc.
какая блин разница, bc или xxd? это вам задачку задал препод что-ли? тогда в job.
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 22.05.2012 11:16
Grih65kop писал(а): ↑ 22.05.2012 01:22
printf '\x4c4e4cc13'
никого ничего не смущает в результате?
сравните с:
$ echo 'obase=2;ibase=16;4C4E4CC13' | bc
10011000100111001001100110000010011
(для выравнивания до четырех цифр надо ноль приписать в начале)
p.s. вместо писем в личку лучше задавать вопросы прямо в теме·
ZyX
Сообщения: 355
ОС: Gentoo
Сообщение
ZyX » 22.05.2012 22:32
Кстати, это, разумеется, можно сделать без каких‐либо значимых усилий на zsh:
(Created by format.vim)
$ echo $(( [# 2 ] 0x2C38 ))
2#10110000111000
$ echo $(( [# 2 ] 16#2C38 ))
2#10110000111000