Python - 将带符号的float转换为Unsigned Long(win32的DWORD)

时间:2014-01-14 05:59:14

标签: python c++ type-conversion

我知道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 );

2 个答案:

答案 0 :(得分:6)

您可以使用struct.packstruct.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)