2013-03-29 17 views
5

Bu yüzden, saçın nasıl kullanılacağını tam olarak bilmiyorum. Ben küçük-endian bir ikili dosya var büyük-endian dönüştürmek için ihtiyacım var ve ben dosyayı okumak için bilmiyorum. İşte ben bugüne kadar ne var:Dosya C içinde bittiğinde yayın nasıl bilinir?

FILE *in_file=fopen(filename, "rb"); 
char buffer[4]; 
while(in_file!=EOF){ 
    fread(buffer, 4, 1, in_file); 
    //convert to big-endian. 
    //write to output file. 
} 

Henüz başka bir şey yazmadım, ama sadece tabiri caizse, 'ilerleme' için fread nasıl emin değilim. Herhangi bir yardım takdir edilecektir. Düzgün C.

fread bir dosyadan okumak yok nasıl

+0

Programı tamamlayın ve çalıştırın! "fread", döngüden son kez ayrıldığı yerden okuyacaktır. Döndürme değerini 'fread''den kontrol etmelisiniz. 'infile'' EOF’a eşit bir olasılıkla karşılaştırılamaz. –

+4

İlerlemenin ilk adımı ** belgeleri okumaktır **. –

+1

Bir için, "rb", ** R ** ead ** B ** inary anlamına gelir; bu nedenle diziniz, int türünde değil, int türünde olmalıdır. – MarcusJ

cevap

13

elemanların sayısını temsil eden bir size_t başarıyla okumak döndürür. Gördüğünüz gibi

FILE* file = fopen(filename, "rb"); 
char buffer[4]; 

if (file) { 
    /* File was opened successfully. */ 

    /* Attempt to read */ 
    while (fread(buffer, 1, 4, file) == 4) { 
     /* byte swap here */ 
    } 

    fclose(file); 
} 

, yukarıdaki kod fread 4 element dışında bir şey ayıklar en kısa sürede okumayı durdurur.

+2

4 bayt'ın okunmamasını ve başlatılmamış değerlerin kullanılmasının tanımlanmamış davranışından kaçınılmasını sağlamak için (fread (buffer, 1, 4, file) == 4) {...} 'seçeneğini öneririm. – Sebivor

+0

Bunu getirdiğiniz için teşekkür ederiz. Sadece boyut için 1 ve sayı için 4 kullanmam gerektiğini anladım. Ayrıca, harika isim kardeşim! –

+0

Gerçekten. Ancak bunu fark etmemiştim. Yorumum, dönüş değerini 0 yerine 4 yerine açıkça karşılaştırmakla ilgiliydi, çünkü eğer fread 3, 2 veya 1 döndürdüyse tamponda başlatılmamış bayt olurdu, bu da eğer bu değerler kullanıldığında tanımlanamayan davranışlarla sonuçlanacaktı. – Sebivor

İlgili konular