我正在尝试将一部分用另一种语言编写的代码(一个名为Igor Pro的晦涩语言,对于那些听说过它的人来说)移植到Python。
在这段代码中,有一个数据类型的转换,从16位整数(从16位大端二进制文件中读取)转换为单精度(32位)浮点数。在这个程序中,转换如下:
带符号的16位整数:
print tmp
tmp[0]={-24160,18597,-24160,18597,-24160}
转换为32位浮点数:
Redimension/S/E=1 tmp
print tmp
tmp[0]={339213,339213,5.79801e-41,0,0}
/S
标志/选项表示 tmp
的数据类型应为 float32 而不是 int16。然而,我认为重要的标志/选项是 /E=1
,它被称为“强制重新整形而不转换或移动数据”。
在 Python 中,转换如下:
>>> tmp[:5]
array([-24160, 18597, -24160, 18597, -24160], dtype=int16)
>>> tmp.astype('float32')
array([-24160., 18597., -24160., ..., 18597., -24160., 18597.], dtype=float32)
这正是我所期望的,但我需要找到一个函数/操作来模拟上面原始代码中的/E=1
选项。是否有一种明显的方式可以将-24160和18597都转换为339213?这与byteswap
或newbyteorder
或其他什么有关吗?