2014-03-12 6 views
1

파이썬에서 int 내부 비트를 읽는 방법을 알고 있지만 char에서는 그렇게하지 않는 방법을 알고 있습니다. int의 경우이 기본 작업은 & (2 ** bit_index)입니다. 그러나 하나의 문자는 다음과 같은 오류 메시지가 제공합니다 경우 unsupported operand type(s) for &: 'str' and 'int'Python : 문자열에서 char의 비트 조작

을,이 "미묘 '문제는, 나는 또한 사용하여 문자열 객체에서 내 문자를 읽고 있어요 :

for my_char in my_string: 

난 강조 이 점은, 그것이 될 수 있기 때문에 그 my_char 내가 유형의 파이썬 핸들 정말 작은 알다시피하기 때문에, 실제로는 길이 하나의 문자열이 아닌 문자입니다.

감사합니다.

+0

'ord()'함수를 보라. 그러나 유니 코드 문자는주의해야한다. – cdarke

답변

2

대신이 시도 : ord(a) & (2**bit_index).

파이썬에는 별도의 문자 유형이 없으며 문자는 크기가 1 인 문자열입니다. 따라서 크기가 1 인 문자열로 비트 조작을 수행하려면 ord()을 사용하여 int으로 변환 할 수 있습니다.

+0

고맙습니다. 다른 솔루션과 마찬가지로이 솔루션을 선택했습니다. 이미 수행 한 작업에서 구현하는 것이 가장 간단하기 때문입니다. –

3

당신은 bytearray 이달를 사용할 수 있습니다 문자열의 ead. 개별 요소는 정수이지만 다음과 같이 전체적으로 기본 문자열 조작을 수행 할 수 있습니다.

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

파이썬에는 실제로 char 유형이 없습니다. 길이가 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