python中居然没有转换10/16进制数为二进制的函数?

python中居然没有转换10/16进制数为二进制的函数?

找了半天,没找到, 郁闷,难道真的没有吗?
而转换二进制为十进制的就有: 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'

int(0x10)
hex(10)
int(str(11),2)
hex(int(str(11),2))
。。。
也疑问中,不知有没有一步到位的

很好很简单 赞这种原创
在计算机的内部,一般就是用16进制,你所说的其实是变成可见的2进制串,python中好象是没有。


QUOTE:
原帖由 limodou 于 2008-9-19 17:11 发表
在计算机的内部,一般就是用16进制,你所说的其实是变成可见的2进制串,python中好象是没有。

16进制?
是2进制吧
能说清楚一点吗?
具体哪方面?是在书面上表示二进制一般用16进制?还是。。。?
我的意思其实就是说我们写的程序一般并不直接使用二进制,而是使用16进制比较多。
一般的开发谁会去用二进制直接量(literal)?
好像是没这个转换;
从Learn Python 3e一书中看到,说Python 3.0中很可能已经有bin()这个函数了, 不知道是真是假?
其实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

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

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

def bin(x):
...