二十十六进制间的转换(整型)


                                前段时间用Python做了一个2/10/16进制之间转换的程序,用来解决IP地址的不同进制表示问题。把代码记到这里。
1、先设置编码utf-8,
               
               
                # -*- coding: utf-8 -*-
#!/usr/bin/env python
# motsqueen 2006-11-30
# base.py
# 2/10/16 base      
 
2、设置各进制中可以出现的元素,并检查输入的串是否合法。
# build elements in base 2, 10, 16.
hexi = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]
deci = hexi[:10]
bina = hexi[:2]
# 判断iterable1中的任一元素是否在iterable2中,如果每一个都在,返回True,否则返回False
def AnyInSet(iterable1, iterable2):
    iter1 = set(iterable1)
    iter2 = set(iterable2)
    if len(iter1) == 0:
        return False
    return iter1.issubset(iter2)
def AnyinMaxMin(iterable, mini,maxi,isIn = True):
    for element in iterable:
        if elementmini or element>maxi:
            return False
    return True
def AnyoutMaxMin(iterable, mini, maxi, isIn=True):
    for element in iterable:
        if mini= element = maxi:
            return False
    return True
 
3、int()函数可以完成2/16/->/10的转换,直接调用;baseto()则完成10->2/16的转换。其中输入的参数都是数字式的字符串,输出也是。
# 把二进制或十六进制字符串转换成十进制整数可用自带的函数int
"""
如把二进制字符串转换成十进制整数:
int('1011',2) = 11
把十六进制字符串转换成十进制整数:
int('B',16) = 11
"""
# 把十进制数整数转换成二进制或十六进制字符串,另外一种实现
def baseto(num,base=2):
    '''
    convert number from decimal to base 1~10
    '''
    lis = []
    while True:
        num,rem = divmod(num,base)
        lis.append(hexi[rem])
        if num == 0:
            break
    return ''.join([str(x) for x in lis[::-1]])
4、102互相转换直接使用上面的两个函数int()和baseto()。而216则先转换成10进制,然后再转换: 21016的步骤。当然也可以使用另外的实现方式。因为这些代码主要面对IP地址这样的有限的计算,所以效率问题不是很突出。
# tag one: 二进制、十进制和十六进制之间转换
def dec2bin(string_num):
    num = int(string_num)
    return baseto(num,2)
def dec2hex(string_num):
    num = int(string_num)
    return baseto(num,16)
def bin2dec(string_num):
    return str(int(string_num,2))
def hex2dec(string_num):
    string_num = string_num.upper()
    return str(int(string_num,16))
def hex2bin(string_num):
    string_num = string_num.upper()
    return dec2bin(hex2dec(string_num))
def bin2hex(string_num):
    return dec2hex(bin2dec(string_num))
5、然后使用Wxpython做了个简单的界面,因为很简陋,代码就不放出来了。