попытайтесь добавить (require 'iso-transl)
в Вашем .emacs
файл.
См. также:
Я бы использовал эту простую функцию:
nibbles () { echo "obase=2; $1" | bc | rev | while read -n4 a; do echo -n "$a ";done | rev ; echo; }
$ nibbles 598980975283696640
1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000
echo 'obase=2;262148' | bc |
perl -E 'say readline
=~ s/((....)*)\n/ $1/r
=~ s/(\d{4})/$1 /gr'
Позволяют до н.э
и , sed
делает разделение на откусывание для вас и использование до н.э
и printf
, чтобы сделать преобразование в набор из двух предметов с 4 цифрами с 0 подкладками:
i=598980975283696640
echo "obase=16;$i" | bc | sed 's/./&\n/g' | \
xargs -I {} sh -c 'echo "ibase=16;obase=2;{}" | bc' | \
xargs printf "%04d "
echo
1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000
echo 'obase=2;598123123980975281233696640' | BC_LINE_LENGTH=0 bc |
rev | fold -w4 | paste -sd ' ' - | rev
или:
echo 'obase=2;598123123980975281233696640' | BC_LINE_LENGTH=0 bc | sed ':1
s/\(.*[01]\)\([01]\{4\}\)/\1 \2/;t1'
BC_LINE_LENGENGE = 0
- это остановить BC
от упаковочных чисел в 70 столбцов. Это означает, что ГНУ, хотя. Rev
не является стандартной командой, но довольно распространена.
Как альтернатива, вы можете использовать интерактивную оболочку Python для него. Например:
$ python
>>> s = bin(598980975283696640)[2:]; s = '0'*(4-len(s)%4)*(len(s)%4>0)+s
>>> [s[i:i+4] for i in range(0, len(s), 4)]
['1000', '0101', '0000', '0000', '0010', '0000', '0110', '0000',
'0011', '0000', '0000', '0111', '0100', '0000', '0000']
>>> s = bin(5989809752836966)[2:]; s = '0'*(4-len(s)%4)*(len(s)%4>0)+s
>>> [s[i:i+4] for i in range(0, len(s), 4)]
['0001', '0101', '0100', '0111', '1011', '0011', '0100', '0010',
'1001', '0111', '0000', '1011', '0110', '0110']
или только для одного выстрела:
$ python -c 's = bin(598980975283696640)[2:]; s = '0'*(4-len(s)%4)*(len(s)%4>0)+s; print [s[i:i+4] for i in range(0, len(s), 4)]'
['1000', '0101', '0000', '0000', '0010', '0000', '0110', '0000', '0011', '0000', '0000', '0111', '0100', '0000', '0000']
Мой предпочтительный путь будет прокладывать его на умножение четырех:
echo 'obase=2;262148'| bc | perl -pe 'chomp; $_ = 0 x ((-length) % 4) . $_;s/([01]{4})/ $1/g;s/$/\n/'
Вы можете применить (GNU) cut
к выходу bc
, используя пользовательский разделитель выходов:
$ echo 'obase=2;5989809752836966' | BC_LINE_LENGTH=0 bc | rev \
| cut --output-delimiter=' ' \
-c$(echo -n 1-4; for i in $(seq 5 4 100); do echo -n ,$i-$((i+3)); done ) \
| rev
1 0101 0100 0111 1011 0011 0100 0010 1001 0111 0000 1011 0110 0110
В конструкции СПИСКА cut
, поставляемого через -c
, используется тот факт, что неиспользуемые части этих списков не сообщаются как ошибка.
Версия dc
:
$ echo '5989809752836966 2 o p' | DC_LINE_LENGTH=0 dc | rev \
| cut --output-delimiter=' ' \
-c$(echo -n 1-4; for i in $(seq 5 4 100); do echo -n ,$i-$((i+3)); done ) \
| rev
1 0101 0100 0111 1011 0011 0100 0010 1001 0111 0000 1011 0110 0110
с GNU awk
:
awk '{while(length%4)$0=0$0;$1=$1}1' FPAT=....
вход
100001010000000000100000011000000011000000000111010000000000
1000000000000000100
Вывод
1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000
0100 0000 0000 0000 0100