我知道python没有无符号变量,但是我需要将一个运行python(Blender)的程序转换为用C ++编写的win32应用程序。我知道我可以像这样转换一个整数:
>>> int i = -1
>>> _ + 2**32
如何使用像:0.2345f这样的浮点数并将其转换为long类型?我需要在python中转换为long,然后在win32(c ++)中返回float ...
通常在C ++中,它是
>>>float f = 0.2345f;
>>>DWORD dw = *reinterpret_cast< DWORD* >( &f );
这会产生一个无符号长...并且将其转换回来就是相反的:
>>>FLOAT f = *reinterpret_cast< FLOAT* >( &dw );
答案 0 :(得分:6)
您可以使用struct.pack
和struct.unpack
。请注意,它不是演员表(即对同一存储器的重新解释),而是转换器(复制到新的存储器)。
import struct
def to_float(int_):
return struct.unpack('d', struct.pack('q', int_))[0]
def to_long(float_):
return struct.unpack('q', struct.pack('d', float_))[0]
data = 0.2345
long_data= to_long(data) #4597616773191482474
new_data = to_float(long_data) #0.2345
答案 1 :(得分:0)
i = 0.2345
converted = long(i)