CTF中一点进制转换脚本记录

第一版进制转换: 

# coding=utf-8
# --author:valecalida--
# 系统只能转字符串,无法转数字!!!
import sys


def encode_string2base():
    str_input = input("Please input a string:")
    result = ''
    for i in range(len(str_input)):
        key = ord(str_input[i])
        if key % 4 == 0:
            result += str(bin(key)) + " "
        elif key % 4 == 1:
            result += str(oct(key)) + " "
        elif key % 4 == 2:
            result += "0d" + str(key) + " "
        elif key % 4 == 3:
            result += str(hex(key)) + " "
        else:
            pass
    print("字符串转二、八、十、十六进制的结果是:", result)


def decode_base2basestring():
    s = input("Please input the bases you want to change:")
    keys = s.split(" ")
    result = ""
    for key in keys:
        if key[0:2] == '0b':
            result += str(chr(int(key[2:], 2)))
        elif key[0:2] == '0o':
            result += str(chr(int(key[2:], 8)))
        elif key[0:2] == '0x':
            result += str(chr(int(key[2:], 16)))
        elif key[0:2] == '0d':
            result += str(chr(int(key[2:])))
        else:
            result += ""
    print("各种进制转换为字符串的结果是:\n\t\t", result)


def ascii2bin():
    s = input("Please input the bases you want to change:")
    result = ""
    for key in s:
        result += str(bin(ord(key))) + " "
    print("字符串转二进制的结果是:\n\t\t", result)


def bin2ascii():
    s = input("输入你想转变成字符串的二进制数据(最好以空格间隔开):")
    result = ""
    keys = s.split(" ")
    for key in keys:
        if key[0:2] == '0b':
            result += str(chr(int(key[2:], 2)))
        else:
            print("您输入的好像有一部分不是二进制数据")
    print(result)


def ascii2oct():
    s = input("Please input the bases you want to change:")
    result = ""
    for key in s:
        result += str(oct(ord(key))) + " "
    print("字符串转八进制的结果是:\n\t\t", result)


def oct2ascii():
    s = input("输入你想转变成字符串的八进制数据(最好以空格间隔开):")
    result = ""
    keys = s.split(" ")
    for key in keys:
        if key[0:2] == '0o':
            result += str(chr(int(key[2:], 8)))
        else:
            print("您输入的好像有一部分不是八进制数据")
    print(result)

def ascii2hex():
    s = input("Please input the bases you want to change:")
    result = ""
    for key in s:
        result += str(hex(ord(key))) + " "
    print("字符串转十六进制的结果是:\n\t\t", result)


def hex2ascii():
    s = input("输入你想转变成字符串的十六进制数据(最好以空格间隔开):")
    result = ""
    keys = s.split(" ")
    for key in keys:
        if key[0:2] == '0x':
            result += str(chr(int(key[2:], 16)))
        else:
            print("您输入的好像有一部分不是十六进制数据")
    print(result)


def ascii2dec():
    s = input("Please input the bases you want to change:")
    result = ""
    for key in s:
        result += str((ord(key))) + " "
    print("字符串转十进制的结果是:\n\t\t", result)


def dec2ascii():
    s = input("输入你想转变成字符串的十进制数据(最好以空格间隔开):")
    result = ""
    keys = s.split(" ")
    for key in keys:
        key = int(key)
        print("key is: ", key)
        if key >= 1 and key <= 128:
            result += str(chr(int(key))) + " "
        else:
            print("您输入的好像有一部分不是十进制数据")
    print(result)


def menu():
    print("*" * 60)
    print("*\t\t(1)将字符串按照二、八、十六、十进制的顺序转换    *")
    print("*\t\t(2)将二、八、十六、十进制的方式转换成字符串      *")
    print("*\t\t(3)将字符串转换成二进制                          *")
    print("*\t\t(4)将二进制转换成字符串                          *")
    print("*\t\t(5)将字符串转换成八进制                          *")
    print("*\t\t(6)将八进制转换成字符串                          *")
    print("*\t\t(7)将字符串转换成十六进制                        *")
    print("*\t\t(8)将十六进制转换成字符串                        *")
    print("*\t\t(9)将字符串转换成十进制(ASCII码)               *")
    print("*\t\t(10)将十进制转换成字符串(带0d格式)             *")
    print("*\t\t(q)退出转换系统                                  *")
    print("*" * 60)


def run_system():
    while True:
        menu()
        user_choice = input("Please input the number you want to operate: ")
        if user_choice == '1':
            encode_string2base()
        elif user_choice == '2':
            decode_base2basestring()
        elif user_choice == '3':
            ascii2bin()
        elif user_choice == '4':
            bin2ascii()
        elif user_choice == '5':
            ascii2oct()
        elif user_choice == '6':
            oct2ascii()
        elif user_choice == '7':
            ascii2hex()
        elif user_choice == '8':
            hex2ascii()
        elif user_choice == '9':
            ascii2dec()
        elif user_choice == '10':
            dec2ascii()
        elif user_choice == 'q':
            print("Quiting this system...")
            sys.exit()
        else:
            print("Wrong input!!!  |  Please make sure your input is right!\n")


run_system()

下面是一部分运行结果

************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 1
Please input a string:1234567890-=qwertyuiop[]\asdfghjkl;zxcvbnm,./
字符串转二、八、十、十六进制的结果是: 0o61 0d50 0x33 0b110100 0o65 0d54 0x37 0b111000 0o71 0b110000 0o55 0o75 0o161 0x77 0o145 0d114 0b1110100 0o171 0o165 0o151 0x6f 0b1110000 0x5b 0o135 0b1011100 0o141 0x73 0b1100100 0d102 0x67 0b1101000 0d106 0x6b 0b1101100 0x3b 0d122 0b1111000 0x63 0d118 0d98 0d110 0o155 0b101100 0d46 0x2f
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 2
Please input the bases you want to change:0o61 0d50 0x33 0b110100 0o65 0d54 0x37 0b111000 0o71 0b110000 0o55 0o75 0o161 0x77 0o145 0d114 0b1110100 0o171 0o165 0o151 0x6f 0b1110000 0x5b 0o135 0b1011100 0o141 0x73 0b1100100 0d102 0x67 0b1101000 0d106 0x6b 0b1101100 0x3b 0d122 0b1111000 0x63 0d118 0d98 0d110 0o155 0b101100 0d46 0x2f
各种进制转换为字符串的结果是:
                 1234567890-=qwertyuiop[]\asdfghjkl;zxcvbnm,./
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 3
Please input the bases you want to change:qwertyuiop
字符串转二进制的结果是:
                 0b1110001 0b1110111 0b1100101 0b1110010 0b1110100 0b1111001 0b1110101 0b1101001 0b1101111 0b1110000
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 4
输入你想转变成字符串的二进制数据(最好以空格间隔开):0b1110001 0b1110111 0b1100101 0b1110010 0b1110100 0b1111001 0b1110101 0b1101001 0b1101111 0b1110000
qwertyuiop
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 4
输入你想转变成字符串的二进制数据(最好以空格间隔开):qwertyuiop
您输入的好像有一部分不是二进制数据

************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 5
Please input the bases you want to change:qwertyuiop
字符串转八进制的结果是:
                 0o161 0o167 0o145 0o162 0o164 0o171 0o165 0o151 0o157 0o160
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 6
输入你想转变成字符串的八进制数据(最好以空格间隔开):0o161 0o167 0o145 0o162 0o164 0o171 0o165 0o151 0o157 0o160
qwertyuiop
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 7
Please input the bases you want to change:qwertyuiop
字符串转十六进制的结果是:
                 0x71 0x77 0x65 0x72 0x74 0x79 0x75 0x69 0x6f 0x70
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 8
输入你想转变成字符串的十六进制数据(最好以空格间隔开):qwertyuiop
您输入的好像有一部分不是十六进制数据

************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 8
输入你想转变成字符串的十六进制数据(最好以空格间隔开):0x71 0x77 0x65 0x72 0x74 0x79 0x75 0x69 0x6f 0x70
qwertyuiop
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 9
Please input the bases you want to change:8
字符串转十进制的结果是:
                 56
************************************************************
*               (1)将字符串按照二、八、十六、十进制的顺序转换    *
*               (2)将二、八、十六、十进制的方式转换成字符串      *
*               (3)将字符串转换成二进制                          *
*               (4)将二进制转换成字符串                          *
*               (5)将字符串转换成八进制                          *
*               (6)将八进制转换成字符串                          *
*               (7)将字符串转换成十六进制                        *
*               (8)将十六进制转换成字符串                        *
*               (9)将字符串转换成十进制(ASCII码)               *
*               (10)将十进制转换成字符串(带0d格式)             *
*               (q)退出转换系统                                  *
************************************************************
Please input the number you want to operate: 10
输入你想转变成字符串的十进制数据(最好以空格间隔开):56
key is:  56
8

第二版进制转换:

我感觉上面写的好像有些杂乱,所以缩减了一部分内容,加了一点异常处理,下面是新的代码

# coding=utf-8
#--author:valecalida--
import sys


def encode_string2base():
    """
    这个函数的功能是将字符串转换成以0b、0o、0d、0x为首的二、八、十、十六进制的数据
    """
    str_input = input("请将需要转换的字符串输入: ")
    result = ''
    for i in range(len(str_input)):
        key = ord(str_input[i])
        if key % 4 == 0:
            result += str(bin(key)) + " "
        elif key % 4 == 1:
            result += str(oct(key)) + " "
        elif key % 4 == 2:
            result += "0d" + str(key) + " "
        elif key % 4 == 3:
            result += str(hex(key)) + " "
        else:
            pass
    print("字符串转二、八、十、十六进制的结果是:", result)


def decode_base2basestring():
    """
    这个函数的功能是将以0b、0o、0d、0x为首的各种格式的数据转换成字符串
    :return:
    """
    s = input("请将以0b、0o、0d、0x为首的各种格式的数据输入:")
    keys = s.split(" ")
    result = ""
    for key in keys:
        if key[0:2] == '0b':
            result += str(chr(int(key[2:], 2)))
        elif key[0:2] == '0o':
            result += str(chr(int(key[2:], 8)))
        elif key[0:2] == '0x':
            result += str(chr(int(key[2:], 16)))
        elif key[0:2] == '0d':
            result += str(chr(int(key[2:])))
        else:
            result += ""
    print("各种进制转换为字符串的结果是:", result)
    s = result
    result1 = ""
    result2 = ""
    result3 = ""
    result4 = ""
    for key in s:
        result1 += str(bin(ord(key))) + " "
        result2 += str(oct(ord(key))) + " "
        result3 += str(hex(ord(key))) + " "
        result4 += str(ord(key)) + " "
    print("字符串转二进制的结果是:\t", result1)
    print("字符串转八进制的结果是:\t", result2)
    print("字符串转十进制的结果是:\t", result4)
    print("字符串转十六进制的结果是:\t", result3)


def strings2bases():
    """
    这个函数的功能是将字符串转换成二、八、十六进制输出出来
    :return:
    """
    s = input("请将您想转换的字符串输入:")
    result1 = ""
    result2 = ""
    result3 = ""
    result4 = ""
    for key in s:
        result1 += str(bin(ord(key))) + " "
        result2 += str(oct(ord(key))) + " "
        result3 += str(hex(ord(key))) + " "
        result4 += str(ord(key)) + " "
    print("字符串转二进制的结果是:\t", result1)
    print("字符串转八进制的结果是:\t", result2)
    print("字符串转十进制的结果是:\t", result4)
    print("字符串转十六进制的结果是:\t", result3)


def num2bases():
    """这个函数的功能十将数字转换成各种进制"""
    res1 = ""
    res2 = ""
    res3 = ""
    try:
        s = int(input("请输入十进制的数据:"))
    except:
        print("您的输入我好像不太能理解,请再重新尝试一下吧。")
    else:
        print("您的输入是:", s)
        print("对应的二进制是:", bin(s))
        print("对应的八进制是:", oct(s))
        print("对应的十六进制是:", hex(s))


def menu():
    print("*" * 80)
    print("*\t\t(1)将字符串转换成二、八、十、十六进制的形式                          *")
    print("*\t\t(2)将二、八、十、十六进制的形式转换成字符串并显示各种形式的进制      *")
    print("*\t\t(3)将字符串转换成各种单独的进制形式                                  *")
    print("*\t\t(4)将数字转换成各种单独的进制形式                                    *")
    print("*" * 80)


def run_system():
    while True:
        menu()
        user_choice = input("Please input the number you want to operate: ")
        if user_choice == '1':
            encode_string2base()
            print("")
        elif user_choice == '2':
            decode_base2basestring()
            print("")
        elif user_choice == '3':
            strings2bases()
            print("")
        elif user_choice == '4':
            num2bases()
            print("")
        elif user_choice == 'q':
            sys.exit()
        else:
            print("您的输入看起来我好像理解不了,请重新尝试一下吧\n")

run_system()

 下面是测试结果:


********************************************************************************
*		(1)将字符串转换成二、八、十、十六进制的形式                          *
*		(2)将二、八、十、十六进制的形式转换成字符串并显示各种形式的进制      *
*		(3)将字符串转换成各种单独的进制形式                                  *
*		(4)将数字转换成各种单独的进制形式                                    *
********************************************************************************
Please input the number you want to operate: 1
请将需要转换的字符串输入: 1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
字符串转二、八、十、十六进制的结果是: 0o61 0d50 0x33 0b110100 0o65 0d54 0x37 0b111000 0o71 0b110000 0o55 0o75 0o161 0x77 0o145 0d114 0b1110100 0o171 0o165 0o151 0x6f 0b1110000 0x5b 0o135 0b1011100 0o141 0x73 0b1100100 0d102 0x67 0b1101000 0d106 0x6b 0b1101100 0x3b 0x27 0d122 0b1111000 0x63 0d118 0d98 0d110 0o155 0b101100 0d46 0x2f 

********************************************************************************
*		(1)将字符串转换成二、八、十、十六进制的形式                          *
*		(2)将二、八、十、十六进制的形式转换成字符串并显示各种形式的进制      *
*		(3)将字符串转换成各种单独的进制形式                                  *
*		(4)将数字转换成各种单独的进制形式                                    *
********************************************************************************
Please input the number you want to operate: 2
请将以0b、0o、0d、0x为首的各种格式的数据输入:0o61 0d50 0x33 0b110100 0o65 0d54 0x37 0b111000 0o71 0b110000 0o55 0o75 0o161 0x77 0o145 0d114 0b1110100 0o171 0o165 0o151 0x6f 0b1110000 0x5b 0o135 0b1011100 0o141 0x73 0b1100100 0d102 0x67 0b1101000 0d106 0x6b 0b1101100 0x3b 0x27 0d122 0b1111000 0x63 0d118 0d98 0d110 0o155 0b101100 0d46 0x2f 
各种进制转换为字符串的结果是: 1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
字符串转二进制的结果是:	 0b110001 0b110010 0b110011 0b110100 0b110101 0b110110 0b110111 0b111000 0b111001 0b110000 0b101101 0b111101 0b1110001 0b1110111 0b1100101 0b1110010 0b1110100 0b1111001 0b1110101 0b1101001 0b1101111 0b1110000 0b1011011 0b1011101 0b1011100 0b1100001 0b1110011 0b1100100 0b1100110 0b1100111 0b1101000 0b1101010 0b1101011 0b1101100 0b111011 0b100111 0b1111010 0b1111000 0b1100011 0b1110110 0b1100010 0b1101110 0b1101101 0b101100 0b101110 0b101111 
字符串转八进制的结果是:	 0o61 0o62 0o63 0o64 0o65 0o66 0o67 0o70 0o71 0o60 0o55 0o75 0o161 0o167 0o145 0o162 0o164 0o171 0o165 0o151 0o157 0o160 0o133 0o135 0o134 0o141 0o163 0o144 0o146 0o147 0o150 0o152 0o153 0o154 0o73 0o47 0o172 0o170 0o143 0o166 0o142 0o156 0o155 0o54 0o56 0o57 
字符串转十进制的结果是:	 49 50 51 52 53 54 55 56 57 48 45 61 113 119 101 114 116 121 117 105 111 112 91 93 92 97 115 100 102 103 104 106 107 108 59 39 122 120 99 118 98 110 109 44 46 47 
字符串转十六进制的结果是:	 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x30 0x2d 0x3d 0x71 0x77 0x65 0x72 0x74 0x79 0x75 0x69 0x6f 0x70 0x5b 0x5d 0x5c 0x61 0x73 0x64 0x66 0x67 0x68 0x6a 0x6b 0x6c 0x3b 0x27 0x7a 0x78 0x63 0x76 0x62 0x6e 0x6d 0x2c 0x2e 0x2f 

********************************************************************************
*		(1)将字符串转换成二、八、十、十六进制的形式                          *
*		(2)将二、八、十、十六进制的形式转换成字符串并显示各种形式的进制      *
*		(3)将字符串转换成各种单独的进制形式                                  *
*		(4)将数字转换成各种单独的进制形式                                    *
********************************************************************************
Please input the number you want to operate: 3
请将您想转换的字符串输入:valecalida
字符串转二进制的结果是:	 0b1110110 0b1100001 0b1101100 0b1100101 0b1100011 0b1100001 0b1101100 0b1101001 0b1100100 0b1100001 
字符串转八进制的结果是:	 0o166 0o141 0o154 0o145 0o143 0o141 0o154 0o151 0o144 0o141 
字符串转十进制的结果是:	 118 97 108 101 99 97 108 105 100 97 
字符串转十六进制的结果是:	 0x76 0x61 0x6c 0x65 0x63 0x61 0x6c 0x69 0x64 0x61 

********************************************************************************
*		(1)将字符串转换成二、八、十、十六进制的形式                          *
*		(2)将二、八、十、十六进制的形式转换成字符串并显示各种形式的进制      *
*		(3)将字符串转换成各种单独的进制形式                                  *
*		(4)将数字转换成各种单独的进制形式                                    *
********************************************************************************
Please input the number you want to operate: 4
请输入十进制的数据:123
您的输入是: 123
对应的二进制是: 0b1111011
对应的八进制是: 0o173
对应的十六进制是: 0x7b

********************************************************************************
*		(1)将字符串转换成二、八、十、十六进制的形式                          *
*		(2)将二、八、十、十六进制的形式转换成字符串并显示各种形式的进制      *
*		(3)将字符串转换成各种单独的进制形式                                  *
*		(4)将数字转换成各种单独的进制形式                                    *
********************************************************************************
Please input the number you want to operate: 4
请输入十进制的数据:mbnvctyhui
您的输入我好像不太能理解,请再重新尝试一下吧。

再追加一个数字进行转换的

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# --author:valecalida--
# Edit_Time : 2019/12/14 16:53
import binascii
conversion = input("输入要转换的进制:")
area0 = ['0', '1']
area1 = ['0', '1', '2', '3', '4', '5', '6', '7']
area2 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
area3 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']


def detect_conversion():
    conversions = conversion.upper()
    res = ""
    i = max(conversions)
    if i in area0 or conversion[0:2]=='0b':
        res = '1'
    elif i in area1 or conversion[0:2]=='0o':
        res = '2'
    elif i in area2 or conversion[0:2]=='0d':
        res = '3'
    elif i in area3 or conversion[0:2]=='0x':
        res = '4'
    else:
        res = '5'
    return res


def binary2strings():
    half = hex(int(conversion, base=2))[2:]
    strings = binascii.a2b_hex(bytes(half, 'utf-8'))
    print(strings)


def dec2strings():
    half = hex(int(conversion))[2:]
    strings = binascii.a2b_hex(half)
    print(strings)


def oct2strings():
    half = hex(int(conversion,base=8))[2:]
    strings = binascii.a2b_hex(bytes(half, 'utf-8'))
    print(strings)


def hex2strings():
    strings = binascii.a2b_hex(bytes(conversion,'utf-8'))
    print(strings)


def main():
    if detect_conversion() == '1':
        print("这是一个二进制字符串")
        binary2strings()
    elif detect_conversion() == '2':
        print("这是一个八进制字符串")
        oct2strings()
    elif detect_conversion() == '3':
        print("这是一个十进制字符串")
        dec2strings()
    elif detect_conversion() == '4':
        print("这是一个十六进制字符串")
        hex2strings()
    elif detect_conversion() == '5':
        print("这可能只是个字符串,没有具体的进制")


if __name__ == '__main__':
    main()

 

发布了83 篇原创文章 · 获赞 42 · 访问量 18万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章