Python实现各种进制相互转换

Python实现各种进制相互转换

代码

# 将字符串从右向左按照n位一组进行分组(二转十六进制和二转八进制所依赖的方法)
def splitStr(string, num):
    index, str, splitList = num - len(string) % num, "", []
    for i in string:
        str, index = str + i, index + 1
        if index % num == 0:
            splitList.append(str)
            str= ""
    return splitList

# 任意进制转十进制(可能会溢出)
def toDec(numStr, adecimal, dec = 0):
    for i in numStr:
        dec = dec * adecimal + "0123456789abcdef".find(i.lower())
    return dec

# 十进制转二进制(可能会溢出)
def decToBin(dec, bin = []):
    while 1:
        bin.insert(0, str(dec % 2))
        dec //= 2
        if dec == 1:
            bin.insert(0, "1")
            break
    return  "".join(bin)

# 二进制转十六进制
def binToHex(bin, hex = ""):
    for i in splitStr(bin, 4):
        hex += "0123456789ABCDEF"[toDec(i, 2)]
    return  hex

# 十六进制转二进制
def hexToBin(hex, bin = ""):
    binL = {"0": "0000", "1": "0001", "2": "0010", "3": "0011", "4": "0100", "5": "0101", "6": "0110", "7": "0111", "8": "1000", "9": "1001", "a": "1010", "b": "1011", "c": "1100", "d": "1101", "e": "1110", "f": "1111"}
    for i in hex:
        bin += binL[i.lower()]
    if bin[0] == "0": # 去掉前面的0
        bin = bin[1:]
        if bin[0] == "0":
            bin = bin[1:]
            if bin[0] == "0":
                bin = bin[1:]
    return bin

# 二进制转八进制
def binToOct(bin, oct = ""):
    for i in splitStr(bin, 3):
        oct += "01234567"[toDec(i, 2)]
    return  oct

# 八进制转二进制
def octToBin(oct):
    binL = {"0": "000", "1": "001", "2": "010", "3": "011", "4": "100", "5": "101", "6": "110", "7": "111"}
    bin = ""
    for i in oct:
        bin += binL[i.lower()]
    if bin[0] == "0":  # 去掉前面的0
        bin = bin[1:]
        if bin[0] == "0":
            bin = bin[1:]
    return bin





if __name__ == "__main__":
    print("\n----------字符串分组-----------")
    print(splitStr("10010101011", 4))

    print("\n----------任意进制转十进制-----------")
    print(toDec("4Ab", 16))           # 十六进制转十进制
    print(toDec("1195", 10))          # 十进制转十进制
    print(toDec("2253", 8))           # 八进制转十进制
    print(toDec("10010101011", 2))   # 二进制转十进制

    print("\n----------十进制转二进制-----------")
    print(decToBin(1195))             # 十进制转二进制(可能会溢出)

    print("\n----------二进制十六进制互转-----------")
    print(binToHex("10010101011"))   # 二进制转十六进制
    print(hexToBin("4Ab"))            # 十六进制转二进制

    print("\n----------二进制八进制互转-----------")
    print(binToOct("10010101011"))   # 二进制转八进制
    print(octToBin("2253"))           # 八进制转二进制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值