使用 shell 脚本把二进制转换成十进制。
该方法支持的二进制范围内是 0 到 111111111111111111111111111111111111111111111111111111111111111(63个1) ,超出后结果会出错。
方法1:
#!/bin/bash
# 定义一个函数,作用是检测用户输入的字符串是否为二进制数(即仅由0和1组成的字符串)
function check_binary() {
echo -ne "请输入一个二进制数(退出请输入: bye):\e[1m"
read binary
echo -e "\e[0m"
while [[ ! "$binary" =~ ^[01]+$ ]]; do
[ "$binary" == "bye" ] && exit
echo -ne "\e[1m你输入的不是二进制数(0或1), 请重新输入(退出请输入:bye): "
read binary
echo -e "\e[0m"
done
}
# bash 中函数必须以字母或下划线开头
function _2t10() {
# 调用"check_binary"函数 ,用于检查用户输入的字符串是否符合二进制数的格式。
check_binary
while [ "$binary" != "bye" ]
do
len=$((${#binary} -1))
jieguo=0
binary_2=$(echo "${binary}" | rev)
for i in $(seq 0 $len)
do
bit=${binary_2:${i}:1}
temp_jieguo=$((2 ** ${i} * ${bit}))
let jieguo=${jieguo}+${temp_jieguo}
unset temp_jieguo bit
done
echo -e "你输入的二进制数: \033[32;1m${binary} \033[0m,对应的十进制数是: \033[32m${jieguo} \033[0m。"
unset binary len jieguo
echo -e "\033[1m----------------------------------------------------------------\033[0m"
# 调用"check_binary"函数 ,用于检查用户输入的字符串是否符合二进制数的格式。
check_binary
done
}
# 调用函数 "_2t10",用于二进制转换成十进制。
_2t10
方法2:
#!/bin/bash
echo -n "请输入一个二进制数(退出请输入: bye): "
read binary
until [ "$binary" == "bye" ]
do
len=$((${#binary} -1))
jieguo=0
num=0
for i in $(seq $len -1 0)
do
bit=${binary:${num}:1}
temp_jieguo=$((2 ** ${i} * ${bit}))
let jieguo=${jieguo}+${temp_jieguo}
let num++
unset temp_jieguo bit
done
echo "二进制: ${binary} ,对应的十进制数是: ${jieguo} 。"
unset binary len num jieguo
echo -e "\033[1m----------------------------------------------------------------\033[0m"
echo -n "请输入一个二进制数(退出请输入: bye): "
read binary
done
方法3:
如果你想要定义一个将二进制转换为十进制的函数,可以像下面这样编写函数体:
function _2t10() {
binary=$1
echo "obase=10; ibase=2; $binary" | bc
}
_2t10 111
在这个例子中,我们首先将函数的参数 $1 赋值给变量 $binary,然后使用 echo 命令输出一条表达式,其中 obase=10 表示输出进制为十进制,ibase=2 表示输入进制为二进制,$binary 表示要转换的二进制数。将输出的表达式传递给 bc 命令进行计算并输出结果,即为转换后的十进制数。
扩展十进制转二进制。
$ echo "obase=2; ibase=10; 2" | bc 10