2014-03-12 94 views
1

我知道如何在Python中讀取int內的位,但不知道如何在char上這樣做。 對於一個int,這個基本操作的工作原理:a &(2 ** bit_index)。但是對於單個字符它提供了以下錯誤信息:unsupported operand type(s) for &: 'str' and 'int'Python:操縱字符串中的字位

在的情況下,這種「微妙」的問題,我也從一個字符串對象使用閱讀我的字符:

for my_char in my_string: 

我強調這一點,因爲它可能是my_char實際上是一個長度的字符串,而不是一個char,只是因爲我知道真的知之甚少的類型蟒蛇手柄。

謝謝。

+0

看看'ord()'函數,但要小心Unicode字符。 – cdarke

回答

2

試試這個:ord(a) & (2**bit_index)

在python中沒有單獨的字符類型,字符只是一個大小爲1的字符串。所以如果你想用大小爲1的字符串執行位操作,你可以使用ord()將它轉換爲int

+0

謝謝,我選擇了其他解決方案,因爲這是我已經完成的最簡單的實現;) –

3

可以使用bytearray研究所字符串的ead。各個元素都是整數,但您仍然可以對整體進行基本的字符串操作:

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

Python實際上並沒有字符類型。你有一個長度爲1的字符串。在將這些運算符應用於它之前,您需要將它轉換爲int。根據my_string中的內容,這可能有效:int(my_char, 10)

1

正確 - 它是一個長度爲1而不是char的字符串。

轉換您的字符串到整數列表:

>>> 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