Python:在字符串中操作字符的位
我知道怎么在Python中读取整数里的位,但不知道怎么在字符里读取位。对于整数,这个简单的操作可以这样做:a & (2**bit_index)。但是对于单个字符,它会给出以下错误信息:unsupported operand type(s) for &: 'str' and 'int'
如果这个“细节”很重要,我是通过以下方式从字符串对象中读取字符的:
for my_char in my_string:
我强调这一点,因为我的字符可能实际上是一个长度为1的字符串,而不是一个字符,只是因为我对Python的类型处理了解得很少。
谢谢。
4 个回答
1
Python其实没有单独的字符类型。它只有长度为一的字符串。如果你想用一些运算符在字符上操作,你需要先把它转换成整数。具体怎么转换,取决于my_string
里面的内容,你可以这样做:int(my_char, 10)
。
2
没错,它是一个长度为1的字符串,而不是一个字符。
把你的字符串转换成一个整数列表:
>>> s = "hello world"
>>> l = [ord(c) for c in s]
然后你就可以在特定的位置上使用位运算符了:
>>> l[1] = l[1] << 1
>>> print "".join(chr(c) for c in l)
h?llo world
3
你可以用一个 bytearray
来代替字符串。里面的每个元素都是整数,不过你仍然可以对整个内容进行基本的字符串操作:
>>> arr = bytearray('foo')
>>> type(arr[0])
<type 'int'>
>>> arr.replace('o', 'u')
bytearray(b'fuu')
2
试试这个方法:ord(a) & (2**bit_index)
。
在Python中,没有单独的字符类型,字符其实就是一个长度为1的字符串。所以如果你想对长度为1的字符串进行位操作,可以使用ord()
这个函数把它转换成一个整数(int
)。