そのため、10進数を2進数に変換するコンバータを作成しましたが、現在は最初の部分でゼロを切り捨てません。 1ドルに64を入力すると13個のゼロで始まりますが、かなり見苦しく、どのように取り除くべきかわかりません。助けが必要ですか?
#!/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
答え1
この特定のアルゴリズムを使用する特別な理由はありますか?
ファイルではなくシェル変数にバイナリをビルドしたいと思います。この場合、数字にゼロを追加して前のゼロを削除できます。
expr 00001111 + 0
1111
また、必ずファイルを使用する必要がある場合は、〜/ Documentsの代わりに/ tmpを使用して一時ファイルを保存することをお勧めします。最後に、私があなたならば、除算を使ってバイナリを構築することを好みます。変換が完了したら、自然に終了して前に来るゼロ問題を解決するのではなく、避けることです。