所以我做了一个十进制到二进制的转换器,但目前它不会在一开始就截掉零。如果我以 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 来保存临时文件。最后,如果我是你,我更愿意使用除法来构造二进制,当转换完成时它自然结束,从而避免前导零的问题而不是解决它。