Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将字节转换为长字节 这是我的C++代码: int r; // result of log_2(v) goes here union { unsigned int u[2]; double d; } t; // temp t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] = 0x43300000; t.u[__FLOAT_WORD_ORDER!=LITTLE_ENDIAN] = v; t.d -= 4503599627370496.0; r = (t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] >> 20) - 0x3FF; return r;_Python_C_Struct_Ctypes_Endianness - Fatal编程技术网

在python中将字节转换为长字节 这是我的C++代码: int r; // result of log_2(v) goes here union { unsigned int u[2]; double d; } t; // temp t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] = 0x43300000; t.u[__FLOAT_WORD_ORDER!=LITTLE_ENDIAN] = v; t.d -= 4503599627370496.0; r = (t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] >> 20) - 0x3FF; return r;

在python中将字节转换为长字节 这是我的C++代码: int r; // result of log_2(v) goes here union { unsigned int u[2]; double d; } t; // temp t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] = 0x43300000; t.u[__FLOAT_WORD_ORDER!=LITTLE_ENDIAN] = v; t.d -= 4503599627370496.0; r = (t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] >> 20) - 0x3FF; return r;,python,c,struct,ctypes,endianness,Python,C,Struct,Ctypes,Endianness,我正试图用python完全复制这段代码,到目前为止,我的代码是: class s(Structure): _fields_ = [("u", c_ulonglong), ("d", c_double)] t = s() t.u = pack('<Q', c_ulonglong(int("0x43300000", 16))) # Error cannot convert argument to integer t.u = pack('>Q', c_ulonglong

我正试图用python完全复制这段代码,到目前为止,我的代码是:

class s(Structure):
    _fields_ = [("u", c_ulonglong), ("d", c_double)]
  t = s()
  t.u = pack('<Q', c_ulonglong(int("0x43300000", 16))) # Error cannot convert argument to integer
  t.u = pack('>Q', c_ulonglong(v))
  t.d -= 4503599627370496.0
  r = (t.u >> 20) - 0x3FF
s类(结构):
_字段=[(“u”,c_-ulonglong),(“d”,c_-double)]
t=s()
t、 u=包装('Q',c_ulonglong(v))
t、 d-=4503599627370496.0
r=(t.u>>20)-0x3FF

当我把十六进制数字装入“U”中时,我的错误是C++中提到的。我想解决这个错误,并用python成功地完成这段代码。

有一个完整的示例(这里有很多未定义的值)会有所帮助,但这更接近目的。注意
Union
c_int*2
的用法:

class s(Union):
    _fields_ = [("u", c_int * 2),
                ("d", c_double)]

t = s()
t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] = 0x43300000
t.u[__FLOAT_WORD_ORDER!=LITTLE_ENDIAN] = v # whatever that is
t.d -= 4503599627370496.0
r = (t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] >> 20) - 0x3FF
return r

你的C++代码一开始就不合法。除了C++最后一个赋值,你不能读取<代码>联合<代码>成员。C++中的C++在哪里?@ BaMuMuGuangOK,我将把这个联盟变成一个结构,但这仍然不能解决我的问题。@ MuHAMADADICADRI改变<代码>联合<代码> > <代码>结构> <代码>将改变代码的含义,使代码更丰富。荒谬。这是来自
struct.pack()
,它无法处理c_ulonglong对象。这可能会引起兴趣: