Ich habe also einen Dezimal-Binär-Konverter erstellt, aber derzeit werden die Nullen am Anfang nicht abgeschnitten. Wenn ich 64 für 1 $ eingebe, beginnt es mit 13 Nullen, was ziemlich unansehnlich ist, aber ich weiß nicht, wie ich sie abschneiden kann. Irgendwelche Hilfe?
#!/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
Antwort1
Gibt es einen bestimmten Grund, warum Sie diesen speziellen Algorithmus verwendet haben?
Ich würde die Binärdatei lieber in Shell-Variablen als in einer Datei erstellen. In diesem Fall können Sie die führenden Nullen entfernen, indem Sie einer Zahl eine Null hinzufügen, wie zum Beispiel
expr 00001111 + 0
1111
Wenn Sie eine Datei verwenden müssen, würde ich außerdem vorschlagen, /tmp statt ~/Documents zum Speichern temporärer Dateien zu verwenden. Und schließlich würde ich an Ihrer Stelle die Binärdatei lieber mit einer Divide-Methode erstellen, die natürlich endet, wenn die Konvertierung abgeschlossen ist, wodurch das Problem führender Nullen vermieden, anstatt es zu lösen wird.