我应该如何理解内置函数bin(x)?

时间:2011-10-23 13:22:27

标签: python

  

bin(x)

     

将整数转换为二进制字符串。结果是一个有效的Python表达式。如果x不是Python int对象,则必须定义一个返回整数的__index__()方法。

因此,如果我想从bin获取Cadilac该怎么处理此字符串和__index__()方法?如何合理地组成它们?

2 个答案:

答案 0 :(得分:3)

这应该让你开始:

>>> for c in "Cadillac":
...     n = ord(c)                  # convert the character to a number
...     print '{0:08b}'.format(n)   # show the number with 8 binary digits
... 
01000011
01100001
01100100
01101001
01101100
01101100
01100001
01100011

答案 1 :(得分:1)

car = "Cadillac"
binstr = "".join( [ bin((1<<8)+ord(s))[3:] for s in car ] )

binstr = '10000111100001110010011010011101100110110011000011100011'

循环字符串中的字符。 ord()将char转换为其序数(ASCII)。 bin()转换为二进制字符串。 [2:]跳过'0b'。 “”。join()将所有内容组合成一个字符串。

EDIT。正如评论员所指出的那样,bin()会截断前导零。基于原始问题的上下文(字符串),我假设我们总是使用8位字符,我的更改在位置8处的高位预先被[3:]剥离。我作弊。当然,这会在Unicode字符串上失败。

bin(1<<8+0)[3:]

'00000000'

len(bin(1<<8+0)[3:])

8

"".join( [ bin((1<<8)+ord(s))[3:] for s in "Cadillac" ] )

'0100001101100001011001000110100101101100011011000110000101100011'