所以我做了一個十進位到二進制的轉換器,但目前它不會在一開始就截掉零。如果我以 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
您使用這種特定演算法有什麼具體原因嗎?
我寧願在 shell 變數中建立二進位文件,而不是在文件中。在這種情況下,您可以透過向數字添加零來去除前導零,例如
expr 00001111 + 0
1111
另外,如果您必須使用文件,我建議使用 /tmp 而不是 ~/Documents 來保存臨時文件。最後,如果我是你,我更願意使用除法來構造二進制,當轉換完成時它自然結束,從而避免前導零的問題而不是解決它。