Python:在字符串中操作char中的位

时间:2014-03-12 16:54:39

标签: python bit

我知道如何在Python中读取int内的位而不是如何在char上读取。 对于int,这个基本操作有效:a& (2 ** bit_index)。但是对于单个字符,它会给出以下错误消息:unsupported operand type(s) for &: 'str' and 'int'

如果这个“微妙”很重要,我也会使用以下字符串从对象中读取我的字符:

for my_char in my_string:

我强调这一点,因为可能是my_char实际上是一个长度为1的字符串而不是char,只是因为我对类型的python句柄知之甚少。

谢谢。

4 个答案:

答案 0 :(得分:3)

您可以使用bytearray而不是字符串。单个元素是整数,但您仍然可以在整体上进行基本的字符串操作:

>>> arr = bytearray('foo')
>>> type(arr[0])
<type 'int'>
>>> arr.replace('o', 'u')
bytearray(b'fuu')

答案 1 :(得分:2)

请改为:ord(a) & (2**bit_index)

在python中没有单独的字符类型,字符只是一个大小为1的字符串。因此,如果您想使用大小为1的字符串执行位操作,可以使用ord()将其转换为int

答案 2 :(得分:1)

Python实际上没有char类型。你有一个长度为1的字符串。您需要先将其转换为int,然后才能在其中应用这些运算符。取决于my_string这可能有用的内容:int(my_char, 10)

答案 3 :(得分:1)

正确 - 它是一个长度为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