2010-12-16 19 views
6

Kayan sayıları ikili dosyalara nasıl okunur ve yazılır? C veya Vala dilinde mi? Yazıları ve okumaları yapmak için kullanılan genel API'ler genellikle bayt biçiminde yazmak üzere tasarlanmıştır. Yani, bir baytlık veri dizisini dosyaya yazmanız ve aynı biçimde okumanız gerekiyor.Kayan sayıları ikili dosyalara nasıl okur ve yazılır?

Float biçiminde yazmak ve okumak için bir yol arıyorum. nota yazmadan ve sayıyı dizgeye dönüştürmek zorunda kalmadan. Mümkün mü?

+0

olası yinelenen [çift serialize ve C ile yüzer] (http://stackoverflow.com/questions/3418319/serialize-double-and-float -with-c) –

cevap

3

fwrite() ve fread() veya write() ve read() işlevi iyi çalışır.

Vala olarak
float da, db ; 
    ... 
fwrite(&da, 1, sizeof(da), fpout) ; 
    ... 
fread(&db, 1, sizeof(db), fpin) ; 
+0

bunu hiç denediniz mi? – sepisoad

+5

@SepiDev: Gerekmiyor, her şeyden sonra soruyu soruyorsunuz; Bunu denediniz mi? Bununla ilgili bir sorun yaşıyorsanız, söz konusu soruda kullandığınız kodu açıklayın. Bir float dört bayt olarak yazılacak; Farklı float kodlama veya bayt sırası ile sistemler arasında veri alışverişi yapmadığınız sürece, bu * işleyecektir. – Clifford

+2

Bu, floatın serileştirilmesindeki enderliği yok sayar. Bu serileştirilmiş formu (dosya, bu durumda) farklı bir endikeğin makinesine hiç taşımadığınız sürece, işe yarayacaktır. Aynı zamanda, kayan nokta temsillerinin aynı olduğunu varsayar (endianiteyle aynı tür), ama IEEE 754 – Thanatos

-1

Yapabileceğiniz: ait

public void main() { 
    float foutvalue = 5.55; 
    { //Need to make vala close the output file! 
     var output = FileStream.open("floatfile","w"); 
     output.printf("%f", foutvalue); 
    } 

    float finvalue = 0.0; 
    { 
     var input = FileStream.open("floatfile", "r"); 
     input.scanf("%f", out finvalue); 
    } 
    print(@"$finvalue\n"); 
} 
İlgili konular