2015-02-27 21 views
5

Python'u buluyorum struct.unpack(), diğer programlar tarafından oluşturulan ikili verileri okumak için oldukça kullanışlıdır.python, ikili dosyadan 16 bayt uzun çift okuyor

Soru: nasıl okunur? çift bir ikili dosya üzerinden 16-bayt uzunluğunda?

Aşağıdaki C kodu, sırasıyla 4 baytlık yüzer, 8 baytlık çift ve 16 baytlık uzun çifte kullanarak, ikili bir dosyaya 1.01 üç kez yazar.

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); 

Python'da, float'ı okuyabilir ve sorun olmadan çifte yapabilirim.

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

Ben modülünde structformat character section 16 baytlık uzun ikizi açıklamasını bulmuyorum.

+0

ctypes uzun double – dawg

cevap

4

Python, binary128'leri yerel olarak desteklemez, dolayısıyla standart kitaplıkta destek bulamazsınız. NumPy'yi (özellikle numpy.frombuffer()) bayttan binary'ye dönüştürmek için kullanmanız gerekecektir128.

f128 = numpy.frombuffer(file.read(16), dtype=numpy.float128) 
+0

neat destekler! Çok teşekkürler. –

İlgili konular