shell中二进制转十进制脚本

使用 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
如有错误,欢迎指正,谢谢!
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容