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

P. *_*ery 0 c++ python type-conversion

我知道python没有无符号变量,但是我需要将一个运行python(Blender)的程序转换为用C++编写的win32应用程序.我知道我可以像这样转换一个整数:

>>> int i = -1

>>> _ + 2**32
Run Code Online (Sandbox Code Playgroud)

我怎样才能像0.2345f那样使用浮点数并将其转换为长类型?我需要在python中转换为long,然后在win32(c ++)中返回float ...

通常在C++中,它是下降的

>>>float f = 0.2345f;

>>>DWORD dw = *reinterpret_cast< DWORD* >( &f );
Run Code Online (Sandbox Code Playgroud)

这会产生一个无符号长...并将其转换回来就是相反的:

>>>FLOAT f = *reinterpret_cast< FLOAT* >( &dw );
Run Code Online (Sandbox Code Playgroud)

ilm*_*nen 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
Run Code Online (Sandbox Code Playgroud)