0

ポインターはPythonでは一般的ではなく、var宣言型でもありません。私はPythonでこれをやろうとしています。

C ++:

 ...a function
 flt32 f;
 int32 sign, exp, man, *tms;
 tms = (int *) &f;
 ...(operations)
 *tms = sign | exp | man;
 return (f);

ご覧のとおり、データをtms指していますが、 (ところで、この関数は完全に機能します)の一部にすぎません。fintfloat

ctypesを使用すると、Pythonでポインターを使用できます。

from ctypes import * 
f = c_float(12.3)
tms = pointer(f) # tms should be: tms = c_int32(value)
print tms.contents.value #12.3000001907

ここでの問題は、tmsすぐにの型になるfため、両方の変数がfloatになることです(そうするtms必要があります。Pythonの変数の値 とちょうど一致するポインターを使用することは可能ですか?tms = c_int32(a_value))
intfloat

4

2 に答える 2

2

本当に Python でこれを行いたい場合は、ctypes.cast() を使用して float ポインターを int ポインターにキャストするか、struct を使用して float 値を文字列にパックし、それを int にアンパックすることができます。次に例を示します。

ctypes.cast() を使用して float 値のメモリを int として表示し、struct を使用して元に変換します。

In [5]: from ctypes import *
In [6]: f = c_float(12.3)
In [8]: tmp = cast(pointer(f), POINTER(c_int)) 
In [9]: tmp.contents
Out[9]: c_long(1095027917)
In [10]: tmp.contents.value
Out[10]: 1095027917
In [11]: hex(tmp.contents.value)
Out[11]: '0x4144cccd'

In [13]: import struct
In [16]: struct.unpack("f",struct.pack("I", 1095027917))
Out[16]: (12.300000190734863,)
于 2012-05-23T00:55:21.533 に答える
1

浮動小数点数の整数部分を取得するには、何が必要ですか?これを行うだけで、次のようになります。

i = int(afloat)
于 2012-05-23T00:23:18.117 に答える