免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2025 | 回复: 0
打印 上一主题 下一主题

二十十六进制间的转换(整型) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-13 09:50 |只看该作者 |倒序浏览

                                前段时间用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做了个简单的界面,因为很简陋,代码就不放出来了。

               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13637/showart_276948.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP