2015-01-11 6 views
0

이 파이썬 2.7 코드는 먼저 "1"을 인쇄하지만 "ValueError : base 10 : ''"인 int()에 대해 유효하지 않은 리터럴을 반환합니다.유니 코드의 유니 코드 문자열 표현을 유니 코드로 변환

num = '\x001\x00' 
print num 
print int(num) 

나는 문제가 type(num) == <type 'str'> 것 같다, 그래서 사실 나는 "1"에 대한 유니 코드 문자열하지만 문자열 "1"의 유니 코드 표현을 포함하는 ASCII 문자열이 없습니다. 나는 그 권리를 얻었습니까?

어쨌든 int를 인식 할 수있는 형식으로 num을 변환하려면 어떻게해야합니까?

+1

문제는'\ x00' 문자입니다. 문자열 '1'은 숫자 '1'로 변환 될 수 있지만, '\ x001 \ x00'은 어떤 숫자입니까? –

답변

4

여기서 유니 코드 대 문자열 값이 아닌 \x00 바이트가 문제입니다. 당신은 그를 제거 할 수 있습니다

int(num.strip('\x00')) 

int()은 아마도 소수점, 기호 (+ 또는 -) 및 주변 공백으로, 숫자를 포함하는 문자열을 받아들입니다. 널 바이트는 인쇄 할 때 터미널이 그것을 무시하더라도 공백이 아닙니다.

1

코드 1 전후에 인쇄중인 이진수 0을 무시하므로이 올바르게 표시됩니다. 1이 표시됩니다.

문자열을 숫자로 올바르게 변환하려면 먼저 문자열의 형식을 알아야합니다. 예를 들어 숫자의 텍스트 표현이 2 진 0으로 둘러싸인 형식 인 경우 Martijn's answer의 코드로 변환 할 수 있습니다. 그렇지 않은 경우 struct 모듈은 이러한 전환에 유용한 유용한 도구입니다.

관련 문제