그래서 10진수를 2진수로 변환하는 변환기를 만들었지만 현재는 처음 부분에서 0을 자르지 않습니다. 1달러에 64를 입력하면 13개의 0으로 시작하는데, 꽤 보기 흉한데 어떻게 없애야 할지 모르겠습니다. 도움이 필요하세요?
#!/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
이 특정 알고리즘을 사용하는 특별한 이유가 있나요?
파일보다는 쉘 변수에 바이너리를 빌드하고 싶습니다. 이 경우 숫자에 0을 추가하여 앞에 오는 0을 제거할 수 있습니다.
expr 00001111 + 0
1111
또한 꼭 파일을 사용해야 한다면 ~/Documents 대신 /tmp를 사용하여 임시 파일을 저장하는 것이 좋습니다. 마지막으로, 제가 여러분이라면 나눗셈을 사용하여 바이너리를 구성하는 것을 선호합니다. 변환이 완료되면 자연스럽게 끝나서 앞에 오는 0 문제를 해결하기보다는 피하는 것입니다.