Así que hice un convertidor de decimal a binario pero actualmente no corta los ceros al principio. Si ingresé 64 por $1, comenzaría con 13 ceros, lo cual es bastante desagradable, pero no sé cómo eliminarlos. ¿Alguna ayuda?
#!/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
Respuesta1
¿Existe alguna razón específica por la que utilizó este algoritmo en particular?
Prefiero construir el binario en variables de shell que en un archivo. En tal caso, puede eliminar los ceros iniciales agregando un cero a un número, como
expr 00001111 + 0
1111
Además, si tiene que usar un archivo, sugeriría usar /tmp en lugar de ~/Documents para guardar archivos temporales. Y finalmente, si yo fuera usted, preferiría construir el binario usando un método de división, que naturalmente finaliza cuando se completa la conversión, evitando así el problema de los ceros a la izquierda en lugar de resolverlo.