我该如何理解内置函数bin(x)?
这个函数可以把一个整数转换成二进制字符串。得到的结果是一个有效的Python表达式。如果
x
不是Python的整数对象,它需要定义一个__index__()
方法,这个方法会返回一个整数。
那么如果我想从Cadilac
中获取bin
,我应该怎么处理这个字符串和__index__()
方法呢?怎么正确地把它们组合在一起?
2 个回答
1
car = "Cadillac"
binstr = "".join( [ bin((1<<8)+ord(s))[3:] for s in car ] )
bin(1<<8+0)[3:]
len(bin(1<<8+0)[3:])
"".join( [ bin((1<<8)+ord(s))[3:] for s in "Cadillac" ] )
这个代码片段定义了一个字符串,内容是二进制数字:'10000111100001110010011010011101100110110011000011100011'。
接下来,我们要对这个字符串里的每一个字符进行循环处理。ord()这个函数可以把字符转换成它的数字表示(也就是ASCII码)。而bin()函数则是把数字转换成二进制字符串。这里的[2:]是用来跳过二进制字符串开头的'0b'部分。最后,"".join()这个方法会把所有的二进制字符串连接成一个完整的字符串。
补充一下,bin()函数会去掉前面的零,正如有评论者提到的那样。根据原问题的背景(字符字符串),我假设我们总是使用8位的字符。我做的修改是在第8位前加了一个高位,这个高位会被[3:]去掉。我这样做有点小聪明。不过,这种方法在处理Unicode字符串时会出错。
这里有个例子:'00000000'。
数字8。
还有一个例子:'0100001101100001011001000110100101101100011011000110000101100011'。
4
这段代码应该能帮助你入门:
>>> 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