我正在尝试从python发出一个节俭的IDL调用。一个变量的thrift数据类型是I32。 我需要发送0到2 ^ 32-1之间的值。对于2 ^ 31和2 ^ 32-1之间的值,python将它们转换为long。所以,我收到一条错误,说“' i'格式代码'对于这些价值观。我尝试过转换为ctypes.c_uint32。那没起效。 我该如何解决这个问题?
答案 0 :(得分:4)
这不是Python问题,而是您在i32
字段中误解了哪些数字会产生误解。
请注意,Thrift 不支持无符号整数,因为它们在许多Thrift的目标语言中没有直接转换为本机(原始)类型。
请注意缺少无符号整数类型。这是因为许多编程语言中没有本地无符号整数类型。
强调我的。
底线是2 ^ 31及以上的值不适合无符号i32
32位int。如果您需要使用超过2 ^ 31-1到2 ^ 63-1的值,请使用i64
类型。