免费注册 查看新帖 |

Chinaunix

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

python中居然没有转换10/16进制数为二进制的函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-18 19:01 |只看该作者 |倒序浏览
找了半天,没找到, 郁闷,难道真的没有吗?
而转换二进制为十进制的就有: int('11011', 2)  ==> 27

于是自己scratch了一个超级初级的函数bin,文件bin.py内容如下:
#!/usr/bin/python

def bin(x):
        result = ''
        x = int(x)
        while x > 0:
                mod = x % 2
                x /= 2
                result = str(mod) + result
        return result

if __name__ == '__main__':
        print bin(2880)
        print bin('2880')
        print bin('hello')    # will fail,  (-:


使用如下:
>>> from bin import bin
>>> bin(15)
'1111'
>>> bin(14)
'1110'
>>> bin( 8 )
'1000'
>>> bin(3456)    # 参数为数字
'110110000000'
>>> bin('3456')  # 参数为由数字组成的字符串
'110110000000'

[ 本帖最后由 chunchengfh 于 2008-9-18 19:03 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-09-18 20:47 |只看该作者
int(0x10)
hex(10)
int(str(11),2)
hex(int(str(11),2))
。。。
也疑问中,不知有没有一步到位的

[ 本帖最后由 izhier 于 2008-9-18 21:00 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-19 13:57 |只看该作者
很好很简单 赞这种原创

论坛徽章:
0
4 [报告]
发表于 2008-09-19 17:11 |只看该作者
在计算机的内部,一般就是用16进制,你所说的其实是变成可见的2进制串,python中好象是没有。

论坛徽章:
0
5 [报告]
发表于 2008-09-19 17:57 |只看该作者
原帖由 limodou 于 2008-9-19 17:11 发表
在计算机的内部,一般就是用16进制,你所说的其实是变成可见的2进制串,python中好象是没有。

16进制?
是2进制吧
能说清楚一点吗?
具体哪方面?是在书面上表示二进制一般用16进制?还是。。。?

论坛徽章:
0
6 [报告]
发表于 2008-09-19 19:47 |只看该作者
我的意思其实就是说我们写的程序一般并不直接使用二进制,而是使用16进制比较多。

论坛徽章:
0
7 [报告]
发表于 2008-09-21 09:55 |只看该作者
一般的开发谁会去用二进制直接量(literal)?

论坛徽章:
0
8 [报告]
发表于 2008-09-25 16:02 |只看该作者
好像是没这个转换;

论坛徽章:
0
9 [报告]
发表于 2008-12-15 15:29 |只看该作者
从Learn Python 3e一书中看到,说Python 3.0中很可能已经有bin()这个函数了, 不知道是真是假?

论坛徽章:
0
10 [报告]
发表于 2008-12-15 17:02 |只看该作者
其实Python对数的支持是最爽的,2进制到36进制都支持,包括string到long的相互转换。
以上不是我说的,你看了python.exe源代码中的longobject.c就知道了,很精悍,很强大。要支持你说的功能,只要吧long_str函数中的10改成2即可。
之所以没有提供你说的这个函数,我想第一可能确实不常用,第二因为Python对常量的表示和大多数语言一样,是基于C语言,包括%d%x,0x1df,07462这些,突然多出一个二进制表示,在语法层面不好解决,如何表示一个二进制常量确实是个问题。
像楼上那位朋友说的,3.0里加一个buildin的bin函数也是一个不错的解决方法,但毕竟不能像16进制那样用起来方便, s = "%x" % 0x2df



原帖由 chunchengfh 于 2008-9-18 19:01 发表
找了半天,没找到, 郁闷,难道真的没有吗?
而转换二进制为十进制的就有: int('11011', 2)  ==> 27

于是自己scratch了一个超级初级的函数bin,文件bin.py内容如下:
#!/usr/bin/python

def bin(x):
...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP