2012-12-20 5 views
3

을 얻는 중 현재색인에서 char을 추출하여 16 진수 값을 얻고 싶습니다. 현재 내가하고 있어요 :문자열에서 16 진수 값

temp = string[i] 
binascii.hexlify(temp); 

하지만 난 오류 얻을 :

TypeError: 'str' does not support the buffer interface 

어떤 아이디어하세요?

답변

3

당신은 바이트 문자열을 인코딩해야합니다

binascii.hexlify(temp.encode('ascii')); 
당신은 적절한 인코딩, 텍스트를 제대로 표시 할 수 하나를 선택해야합니다

; 귀하의 유니 코드 문자가 0-127 범위에 있다고 가정합니다.

다른 인코딩으로 인코딩하면 결과는 해당 인코딩의 16 진수 표현이됩니다. UTF-8은 문자 당 1 ~ 6 바이트를 사용합니다.

또는, ord() function을 사용하고 포맷 결과를 16 진수 수 :

format(ord(temp), 'x') 

을하고는 유니 코드 문자로 작업 할 수 있습니다. 16 진수 표현을 위해 유니 코드 코드 포인트를 사용하므로 1에서 4 바이트 사이입니다 (\Uabcdefgh 와이드 문자의 경우 후자). 최대 문자 너비에 따라 모호한 코드 포인트를 방지하기 위해 바이트를 채우기를 원할 수 있습니다.

format(ord(temp), '04x') 
+0

사실 ASCII 문자는 0 ~ 127 범위에서 가을 : 당신은 코드 포인트 \uffff까지 인코딩 다음 2 바이트 모든 코드 포인트, 4 개 진수 문자를 사용해야합니다 필요하다고. – kmkaplan

+0

@kmkaplan : 나는 아스키가 0-255 범위에 있다고 말하지 않았다, 나는 그의 데이터가 그 범위에 있다고 추정했다 :-P하지만 당신은 정확하다. 128-255 바이트 값은 ASCII로 인코딩되지 않을 것이다. –

+0

그 일을하고있어. 감사 !! – SagiLow