2012-04-18 2 views
0

Что может быть самым кратким способом в bash для преобразования числа в строку символов битового поля, например 1101?преобразование числа в строку битполя в bash

В действительности я пытаюсь сделать противоположное

echo $[2#1101] 

Почему: мне нужно отправить параметр в программе, которая принимает битовые поля в виде полной строки, как «0011010110», но часто только нужно чтобы включить один или несколько битов, как в:

SUPPRESSbits=$[1<<16] runscript.sh # OR 
SUPPRESSbits=$[1<<3 + 1<<9] runscript.sh # much more readable when I know what bits 3 and 9 toggle in the program 

затем runscript.sh то видит в его окр SUPPRESSbits=65536, а не SUPPRESSbits="1000000000000000" и заканчивается ошибки анализа.

ответ

5

Простой способ:

$ dc <<<2o123p 
1111011 

$ bc <<<'obase=2; 123' 
1111011 
+0

Великий, он вряд ли может получить более кратким, чем с 'dc' там. Таким образом, 'bash', похоже, не имеет встроенных в строку строк – Marcos

1

Сомневаюсь о Баш, но вы всегда можете использовать Perl:

a=123; b=$(perl -e 'printf "%b", "'$a'"'); echo $b 
1111011 
Смежные вопросы