Então fiz um conversor decimal para binário, mas atualmente ele não elimina os zeros no início. Se eu inserisse 64 por $1, começaria com 13 zeros, o que é um tanto feio, mas não sei como cortá-los. Qualquer ajuda?
#!/bin/bash
cat /dev/null > ~/Documents/.tobinary
touch ~/Documents/.tobinary
toBin=$1
counter=0
numZeros=0
first1=0
kill=0
echo $toBin
for v in {19..0}
do
let temp=2**$v
let test=$toBin-$temp
if [ $test -ge 0 ]
then
if [ $first1 -eq 0 ]
then
kill=$numZeros
let first1++
fi
if [ $test -gt 0 ]
then
echo -n 1 >> ~/Documents/.tobinary
toBin=$test
elif [ $test -eq 0 ]
then
echo -n 1 >> ~/Documents/.tobinary
while [ $counter -lt $v ]
do
echo -n 0 >> ~/Documents/.tobinary
let counter++
done
break
fi
elif [ $test -lt 0 ]
then
echo -n 0 >> ~/Documents/.tobinary
let numZeros++
fi
done
cat ~/Documents/.tobinary
Responder1
Existe um motivo específico pelo qual você usou esse algoritmo específico?
Prefiro construir o binário em variáveis de shell do que em um arquivo. Nesse caso, você pode retirar os zeros iniciais adicionando um zero a um número, como
expr 00001111 + 0
1111
Além disso, se você precisar usar um arquivo, sugiro usar /tmp em vez de ~/Documents para armazenar arquivos temporários. E por fim, se eu fosse você, preferiria construir o binário usando um método de divisão, que termina naturalmente quando a conversão é concluída, evitando assim o problema de zeros à esquerda em vez de resolvê-lo.