2014-03-28 2 views
0

저는 파이썬에서 절약 IDL 호출을하려고합니다. 하나의 변수의 절약 유형은 I32입니다. 값을 0과 2^32-1 사이로 보내야합니다. 2^31과 2^32-1 사이의 값의 경우 파이썬은 그것들을 long으로 변환합니다. 그래서, 나는 '이 값을위한 형식 코드'의 범위를 벗어나는 정수를 말하는 오류가 발생합니다. 나는 ctypes.c_uint32로 변환을 시도했다. 그것은 작동하지 않았다. 이 문제를 어떻게 해결할 수 있습니까?어떻게 파이썬을 c unsigned int로 변환합니까?

+0

NumPy를 사용해 보셨습니까? –

+0

@salmanwahed : Thrift는 RPC 프레임 워크이며 NumPy와 완전히 직교합니다. –

답변

4

이것은 파이썬 문제가 아니며, 숫자가 i32 필드에 맞는 부분에 대한 오해입니다. Thrift: The Missing Guide에서

: 그들은 드리프트의 대상 언어의 많은 네이티브 (원시) 유형에 직접 변환이 없기 때문에 드리프트 는 부호없는 정수를을 지원하지 않습니다

참고.

Thrift Types documentation에서

:

참고 부호없는 정수 타입의 부재. 이는 많은 프로그래밍 언어에서 원시 부호없는 정수 유형이 없기 때문입니다.

강조 광산.

결론은 2^31 이상의 값은 부호가없는 i32 32 비트 int에 맞지 않습니다. 2^31-1 이상 2^63-1까지의 값을 사용해야하는 경우 i64 유형을 대신 사용하십시오.

+0

"결론은 2^31 이상의 값은 부호없는 int에 맞지 않습니다." 그래, 이것에 초점을 맞춰야 해. –

+1

@ericchiang : 그리고 Thrift에 대한 연구는 그 프레임 워크가 부호없는 정수를 지원하지 않는다는 것을 보여줍니다. –

+0

@MartijnPieters ist right. 그런 식으로, 그게 바로 이유입니다. – JensG

관련 문제