python从二进制文件读取16个字节的长双

Pen*_*ang 5 python

我发现python struct.unpack()非常方便读取其他程序生成的二进制数据.

问题:如何从二进制文件中读取16字节长的双倍内容

以下C代码将1.01写入三次到二进制文件,分别使用4字节浮点数,8字节双精度数据块和16字节长双精度值.

FILE* file     = fopen("test_bin.bin","wb");
float f        = 1.01;
double d       = 1.01;
long double ld = 1.01;
fwrite(&f, sizeof(f),1,file);
fwrite(&d, sizeof(d),1,file);
fwrite(&ld, sizeof(ld),1,file);                     
fclose(file);
Run Code Online (Sandbox Code Playgroud)

在python中,我可以读取float和double,没有问题.

file=open('test_bin.bin','rb')
struct.unpack('<fd',file.read(12)) # (1.0099999904632568, 1.01) as expected.
Run Code Online (Sandbox Code Playgroud)

我没有在模块struct 格式字符部分找到16字节长双精度的描述.

Ign*_*ams 4

Python 本身不支持 binary128,因此您在标准库中找不到对它们的支持。您将需要使用 NumPy(特别是numpy.frombuffer())将字节转换为二进制 128。

f128 = numpy.frombuffer(file.read(16), dtype=numpy.float128)
Run Code Online (Sandbox Code Playgroud)