Python中与CPP reinterpret_cast等效的是什么?

6

我遇到了一个关于 reinterpret_cast 强制转换运算符的微不足道的问题。基本上,在 CPP 中,我有一个 float 变量,使用 reinterpret_cast 创建一个 uint32_t 变量,如下所示 -

float x = 2.2949836e-38;
uint32_t rgb = *reinterpret_cast<uint32_t*>(&x);
printf("rgb=%d", rgb); // prints rgb=16377550

我希望在Python中实现相同的功能。请注意,传统的int强制转换没有产生预期的结果。


2
你想在Python中实现UB吗? - Slava
虽然看起来像C++,但实际上并不是。这种语言明确地选择不为该片段分配任何含义。 - Caleth
3
完整性起见... 在C++中正确的做法是memcpy(&rgb, &x, sizeof(uint32_t))。它避免了别名问题,而且memcpy函数调用会被优化掉。 - Peter
1个回答

11

你可以使用struct模块中的packunpack函数:

from struct import pack, unpack

b = pack('f', 2.2949836e-38)
print(unpack('i', b)[0])

输出:

16377550

编辑:

简化示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接