我知道公元前:
$> var="304"
$> echo "obase=2; $var" | bc
100110000
Run Code Online (Sandbox Code Playgroud)
可以在shell中完成吗(没有外部调用)?
这个问题: Binary to hexadecimal and decimal in a shell script 询问如何从二进制转换,而不是转换为二进制数。
那里的答案使用 xxd 或其他一些外部工具处理二进制字节(与二进制数相反,即:基数为 2 的数字)。所以,不,这个问题不是那个的重复。
perl
是完成这项工作的好工具:
$ var="304"
$ perl -e 'printf "%b\n",'$var
100110000
Run Code Online (Sandbox Code Playgroud)
小智 7
在 bash 中:
toBinary(){
local n bits sign=''
(($1<0)) && sign=-
for (( n=$sign$1 ; n>0 ; n >>= 1 )); do bits=$((n&1))$bits; done
printf "%s\n" "$sign${bits-0}"
}
Run Code Online (Sandbox Code Playgroud)
用:
$> toBinary 304
100110000
Run Code Online (Sandbox Code Playgroud)
或更多 POSIX_ly:
toBinaryPOSIX(){
n=$(($1))
bits=""
sign=""
if [ "$n" -lt 0 ]; then
sign=- n=$((-n))
fi
while [ "$n" -gt 0 ]; do
bits="$(( n&1 ))$bits";
: $(( n >>= 1 ))
done
printf "%s\n" "$sign${bits:-0}"
}
Run Code Online (Sandbox Code Playgroud)
用:
$> toBinaryPOSIX 304
100110000
Run Code Online (Sandbox Code Playgroud)
如果值为十六进制:
$> toBinaryPOSIX 0x63
1100011
Run Code Online (Sandbox Code Playgroud)