python中进制之间的转化

注意:本文只针对整数进制之间的转化。后期会更新浮点型的进制转化。

1、十进值转二进制、八进制、十六进制

1.1 十进制转二进制

按权展开。除二取余,直到商为0。逆序写出取余。

图1

python中实现代码如下:

     # ----------------------二进制与十进制的转化---------------------------
    def Decimalism2Binary(self):
        """十进制转二进制"""
        # 定义一个列表来存储二进制
        n = self.Decimalism
        Binary_list = ''
        while True:
            temp, sod = int(n / 2), n % 2
            Binary_list = Binary_list + str(sod)
            if temp == 0:
                break
            n = temp
        return Binary_list[::-1]

1.2 十进制转八进制

按权展开。除8取余,直到商为0。逆序写出取余。见图1

    # --------------------十进制转八进制-----------------------
    def Decialism2octal(self):
        """由于用二进制表示的数的位数长,书写不 便,为了便于书写常采用八进制(Octal Q)和十六进制 (Hexadecimal)作为中间进制。"""
        temp = ""
        n = self.Decimalism
        while True:
            m, sod = int(n / 8), n % 8
            temp += str(sod)
            if m == 0:
                break
            n = m
        return temp[::-1]

1.3 十进制转十六进制

按权展开。除16取余,直到商为0。逆序写出取余。见图1

    # --------------------十进制与十六进制的转化---------------------------
    def Decimalism2hexadecimal(self):
        """十进制->十六进制"""
        n = self.Decimalism
        hexadecimal = ''
        while True:
            temp, sod = int(n / 16), n % 16
            if sod < 10:
                hexadecimal += str(sod)
            else:
                hexadecimal += self.hexadecimal_index[str(sod)]
            if temp == 0:
                break
            n = temp
        return hexadecimal[::-1]

2、 二进制转十进制、八进制、十六进制

2.1 二进制转十进制

从后往前每个二进制数×2的0,1,2,3····次方,依次往前推。

图2

python代码实现

    def Binary2Dcimaalism(self, binary):
        """二进制转十进制"""
        line_binary = len(binary)
        temp = 0
        m = 0
        for i in binary[::-1]:
            temp += int(i) * pow(2, m)
            m += 1
            if m == line_binary:
                break
        return temp

2.2 二进制转八进制

从后往前每个三个为一组,对于每个组中从后往前,每个二进制数×2的0,1,2,3····次方,依次往前推。

图 3

Python代码实现

    def Binary2octal(self, binary_str):
        new_str = binary_str[::-1]
        """二进制转八进制"""
        temp = ""
        for i in range(len(binary_str)):
            temp_1 = 0
            if i == 0 or i % 3 == 0:
                m = new_str[i:i + 3:1]
                p = 0
                for j in m:
                    temp_1 += int(j) * pow(2, p)
                    p += 1
                temp += str(temp_1)
        return temp[::-1]

2.3 二进制转十六进制

从后往前每4个二进制为一组,按照转八进制的计算方法。对于每个组中从后往前,每个二进制数×2的0,1,2,3····次方,依次往前推。

Python代码实现

    def Binary2hexadecilam(self, binary_str):
        """二进制转十六进制"""
        new_str = binary_str[::-1]
        temp = ""
        for i in range(len(binary_str)):
            temp_1 = 0
            if i == 0 or i % 4 == 0:
                m = new_str[i:i + 4:1]
                count = 0
                for j in m:
                    temp_1 += int(j) * pow(2, count)
                    count += 1
                if temp_1 < 10:
                    temp += str(temp_1)
                else:
                    temp += self.hexadecimal_index[str(temp_1)]
        return temp[::-1]

3、八进制、十六进制转十进制

3.1 八进制转十进制

如同二进制转十进制。从后往前每个八进制数×8的0,1,2,3·······次方,依次往前推。

python代码实现

    def Octal2decilism(self, octal_num):
        """八进制转十进制"""
        m = 0
        temp = 0
        for i in octal_num[::-1]:
            temp += int(i) * pow(8, m)
            m += 1
        return temp

3.2 十六进制转十进制

如同二进制转十进制。从后往前每个八进制数×16的0,1,2,3·······次方,依次往前推。

python代码实现

    def Hexadecimal2decimalism(self, hexadecimal_num):
        """十六进制转十进制"""
        m = 0
        temp = 0
        for i in hexadecimal_num[::-1]:
            if i in self.Alphabet_num.keys():
                temp += int(self.Alphabet_num[i]) * pow(16, m)
            else:
                temp += int(i) * pow(16, m)
            # if m == len(hexadecimal_num):
            #     break
            m += 1
        return temp

4、八进制、十六进制转二进制

4.1 八进制转二进制

每个八进制数按权展开。除二取余,直到商为0。逆序写出取余。三个为一组按八进制的顺序连接起来。

    def Octal2binary(self, octal_num):
        """八进制转二进制"""
        octal_str = str(octal_num)
        temp = ''  # 用来存放转化出来的数
        for i in octal_str:
            temp_1 = ''
            while True:
                m, sod = int(int(i) / 2), int(i) % 2
                temp_1 += str(sod)
                if m == 0:
                    break
                i = m
            if len(temp_1) < 3:

                temp_1 = '0' * (3 - len(temp_1)) + temp_1[::-1]
                temp += temp_1
            else:
                temp += temp_1[::-1]
        if temp[0] == '0':
            temp_list = list(temp)
            del temp_list[0]
            if temp_list[0] == '0':
                del temp_list[0]

        return ''.join(temp_list)

4.2 十六进制转二进制

每个十六进制数按权展开。除二取余,直到商为0。逆序写出取余。每四个为一组按八进制的顺序连接起来。

    def Hexadecimal2binary(self, hexadecilism_str):
        """十六进制转二进制"""
        temp = ""
        for i in hexadecilism_str:
            temp_1 = ''
            if i in self.Alphabet_num.keys():
                m = self.Alphabet_num[i]
                while True:
                    g, sod = int(int(m) / 2), int(m) % 2
                    temp_1 += str(sod)
                    if g == 0:
                        break
                    m = g
            else:
                while True:
                    n, sod = int(int(i) / 2), int(i) % 2
                    temp_1 += str(sod)
                    if n == 0:
                        break
                    i = n
            if len(temp_1) < 4:
                temp_1 = '0'* (4-len(temp_1)) + temp_1[::-1]
                temp += temp_1
            else:
                temp += temp_1[::-1]
        if temp[0] == '0':
            temp_list = list(temp)
            del temp_list[0]
            if temp_list[0]=='0':
                del temp_list[0]
            if temp_list[0] == '0':
                del temp_list[0]
            if temp_list[0] == '0':
                del temp_list[0]
        return ''.join(temp_list)

5 、八进制和十六进制之间的转化

这个两个进制之间不能直接转化,需要借助二进制来完成。

5.1 八进制转十六进制

    def Octal2hexadecilam(self, octal_str):
        """八进制转十六进制"""
        # 先把八进制转二进制,再转十六进制
        oct2bin = self.Octal2binary(octal_str)
        # 2.二进制转十六进制
        return self.Binary2hexadecilam(oct2bin)

5.2 十六进制转二进制

    def Hexadecilam2octal(self, hexadeilism_str):
        """十六进制转八进制"""
        # 十六进制转二进制,再转八进制
        hexad2binary_str = self.Hexadecimal2binary(hexadeilism_str)
        return self.Binary2octal(hexad2binary_str)

6、完整代码

# -*- coding:utf-8 -*-
"""
作者:lihua
日期:年09月06日
"""
import math


class Decimal_Coversion(object):
    def __init__(self, Decimalism):
        self.Decimalism = Decimalism
        self.hexadecimal_index = {"10": "a",
                                  "11": "b",
                                  "12": "c",
                                  "13": "d",
                                  "14": "e",
                                  "15": "f"}
        # 转化一下十六进制的键值
        self.Alphabet_num = {v: k for k, v in self.hexadecimal_index.items()}

    # ----------------------二进制与十进制的转化---------------------------
    def Decimalism2Binary(self):
        """十进制转二进制"""
        # 定义一个列表来存储二进制
        n = self.Decimalism
        Binary_list = ''
        while True:
            temp, sod = int(n / 2), n % 2
            Binary_list = Binary_list + str(sod)
            if temp == 0:
                break
            n = temp
        return Binary_list[::-1]

    def Binary2Dcimaalism(self, binary):
        """二进制转十进制"""
        line_binary = len(binary)
        temp = 0
        m = 0
        for i in binary[::-1]:
            temp += int(i) * pow(2, m)
            m += 1
            if m == line_binary:
                break
        return temp

    # --------------------十进制与十六进制的转化---------------------------
    def Decimalism2hexadecimal(self):
        """十进制->十六进制"""
        n = self.Decimalism
        hexadecimal = ''
        while True:
            temp, sod = int(n / 16), n % 16
            if sod < 10:
                hexadecimal += str(sod)
            else:
                hexadecimal += self.hexadecimal_index[str(sod)]
            if temp == 0:
                break
            n = temp
        return hexadecimal[::-1]

    def Hexadecimal2decimalism(self, hexadecimal_num):
        """十六进制转十进制"""
        m = 0
        temp = 0
        for i in hexadecimal_num[::-1]:
            if i in self.Alphabet_num.keys():
                temp += int(self.Alphabet_num[i]) * pow(16, m)
            else:
                temp += int(i) * pow(16, m)
            # if m == len(hexadecimal_num):
            #     break
            m += 1
        return temp

    # --------------------十进制转八进制-----------------------
    def Decialism2octal(self):
        """由于用二进制表示的数的位数长,书写不 便,为了便于书写常采用八进制(Octal Q)和十六进制 (Hexadecimal)作为中间进制。"""
        temp = ""
        n = self.Decimalism
        while True:
            m, sod = int(n / 8), n % 8
            temp += str(sod)
            if m == 0:
                break
            n = m
        return temp[::-1]

    def Octal2decilism(self, octal_num):
        """八进制转十进制"""
        m = 0
        temp = 0
        for i in octal_num[::-1]:
            temp += int(i) * pow(8, m)
            m += 1
        return temp

    # --------------------十进制转二进制-----------------------
    def Octal2binary(self, octal_num):
        """八进制转二进制"""
        octal_str = str(octal_num)
        temp = ''  # 用来存放转化出来的数
        for i in octal_str:
            temp_1 = ''
            while True:
                m, sod = int(int(i) / 2), int(i) % 2
                temp_1 += str(sod)
                if m == 0:
                    break
                i = m
            if len(temp_1) < 3:

                temp_1 = '0' * (3 - len(temp_1)) + temp_1[::-1]
                temp += temp_1
            else:
                temp += temp_1[::-1]
        if temp[0] == '0':
            temp_list = list(temp)
            del temp_list[0]
            if temp_list[0] == '0':
                del temp_list[0]

        return ''.join(temp_list)

    def Binary2octal(self, binary_str):
        new_str = binary_str[::-1]
        """二进制转八进制"""
        temp = ""
        for i in range(len(binary_str)):
            temp_1 = 0
            if i == 0 or i % 3 == 0:
                m = new_str[i:i + 3:1]
                p = 0
                for j in m:
                    temp_1 += int(j) * pow(2, p)
                    p += 1
                temp += str(temp_1)
        return temp[::-1]
    # --------------------十六进制转二进制-----------------------
    def Hexadecimal2binary(self, hexadecilism_str):
        """十六进制转二进制"""
        temp = ""
        for i in hexadecilism_str:
            temp_1 = ''
            if i in self.Alphabet_num.keys():
                m = self.Alphabet_num[i]
                while True:
                    g, sod = int(int(m) / 2), int(m) % 2
                    temp_1 += str(sod)
                    if g == 0:
                        break
                    m = g
            else:
                while True:
                    n, sod = int(int(i) / 2), int(i) % 2
                    temp_1 += str(sod)
                    if n == 0:
                        break
                    i = n
            if len(temp_1) < 4:
                temp_1 = '0'* (4-len(temp_1)) + temp_1[::-1]
                temp += temp_1
            else:
                temp += temp_1[::-1]
        if temp[0] == '0':
            temp_list = list(temp)
            del temp_list[0]
            if temp_list[0]=='0':
                del temp_list[0]
            if temp_list[0] == '0':
                del temp_list[0]
            if temp_list[0] == '0':
                del temp_list[0]
        return ''.join(temp_list)

    def Binary2hexadecilam(self, binary_str):
        """二进制转十六进制"""
        new_str = binary_str[::-1]
        temp = ""
        for i in range(len(binary_str)):
            temp_1 = 0
            if i == 0 or i % 4 == 0:
                m = new_str[i:i + 4:1]
                count = 0
                for j in m:
                    temp_1 += int(j) * pow(2, count)
                    count += 1
                if temp_1 < 10:
                    temp += str(temp_1)
                else:
                    temp += self.hexadecimal_index[str(temp_1)]
        return temp[::-1]

    # --------------------十六进制转八进制-----------------------
    def Octal2hexadecilam(self, octal_str):
        """八进制转十六进制"""
        # 先把八进制转二进制,再转十六进制
        oct2bin = self.Octal2binary(octal_str)
        # 2.二进制转十六进制
        return self.Binary2hexadecilam(oct2bin)

    def Hexadecilam2octal(self, hexadeilism_str):
        """十六进制转八进制"""
        # 十六进制转二进制,再转八进制
        hexad2binary_str = self.Hexadecimal2binary(hexadeilism_str)
        return self.Binary2octal(hexad2binary_str)

    def procing(self):
        print("-" * 100)
        binary_num = self.Decimalism2Binary()
        decimalism_num = self.Binary2Dcimaalism(binary_num)
        print(f"十进制({self.Decimalism})转二进制:{binary_num} ")
        print(f'二进制{binary_num}转十进制:{decimalism_num}')
        print("-" * 100)
        hexadecimal = self.Decimalism2hexadecimal()
        print(f'十进制{self.Decimalism}转十六进制:{hexadecimal}')
        hexade2decima = self.Hexadecimal2decimalism(hexadecimal)
        print(f'十六进制{hexadecimal}转十进制:{hexade2decima}')
        print("-" * 100)
        octal_num = self.Decialism2octal()
        print(f'十进制{self.Decimalism}转八进制:{octal_num}')
        octal2deci_num = self.Octal2decilism(octal_num)
        print(f'八进制{octal_num}转十进制:{octal2deci_num}')
        print("-" * 100)
        octal2binary_str = self.Octal2binary(octal_num)
        print(f'八进制{octal_num}转二进制:{octal2binary_str}')
        octal_str = self.Binary2octal(octal2binary_str)
        print(f'二进制{octal2binary_str}转八进制:{octal_str}')
        print("-" * 100)
        hexadecilism2binary_num = self.Hexadecimal2binary(hexadecimal)
        print(f'十六进制{hexadecimal}转二进制:{hexadecilism2binary_num}')
        binary2hexadecilism_str = self.Binary2hexadecilam(hexadecilism2binary_num)
        print(f'二进制{hexadecilism2binary_num}转十六进制:{binary2hexadecilism_str}')
        print("-" * 100)
        oct2hexad = self.Octal2hexadecilam(octal_num)
        print(f'八进制{octal_num}转十六进制:{oct2hexad}')
        hex2oct_str = self.Hexadecilam2octal(oct2hexad)
        print(f'十六进制{octal_num}转八进制:{hex2oct_str}')


if __name__ == '__main__':
    # decimalism = int(input('请输入一个十进制数(整数):'))
    # print(type(decimalism))
    decimalism = 2022
    cov = Decimal_Coversion(decimalism)
    # 给定一个数
    cov.procing()

6.1 上述代码运行结果

本文中的代码只是将十进制2022作为输入。如果需要将其他进制作为输入。需要修改调用进制。

遇到什么问题,可以联系本人(vx:lhkust299)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值