2016-07-28 85 views
-1

有一個數組:我如何把二進制數組轉換成二進制文件

int a[5] = { 1, 0, 0, 1, 1 }; 

當使用循環的每個元素放到一個文本文件,該文件的大小爲5個字節。所以我想把這五個元素放到一個二進制文件中,這樣大小就是5位。我怎樣才能做到這一點?

+0

只是把它'fwrite'到一個二進制文件..真的,這是什麼問題? –

+0

@EugeneSh。看看原帖 –

+0

哼。爲什麼編輯呢?編輯顯然是相互衝突的。 @dbush –

回答

2

如果你想要寫5個字節的文件,你應該使用類型unsigned char並打開輸出文件爲二進制:

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    unsigned char a[5] = { 1, 0, 0, 1, 1 }; 
    FILE *fp = fopen("filename", "wb"); 
    if (fp == NULL) { 
     fprintf(stderr, "cannot open filename: %s\n", strerror(errno)); 
     exit(1); 
    } 

    if (fwrite(a, 1, 5, fp) != 5) { 
     fprintf(stderr, "cannot write to filename: %s\n", strerror(errno)); 
     fclose(fp); 
     exit(1); 
    } 

    fclose(fp); 
    return 0; 
} 

你的問題是豆蔻困惑:

所以我想把這五個元素放到一個二進制文件中,使其大小爲5位

在大多數系統中,您不能將單個位寫入文件和文件大小不是以位表示,而是以字節表示,通常是8位寬。您可以設置一個字節的規定值的5位,但你必須決定如何在一個字節位數...

如果位從最低顯著編號到最顯著,這裏是你如何能做到這個:

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 

/* assuming array `a` contains bit values */ 
int a[5] = { 1, 0, 0, 1, 1 }; 

int main(void) { 
    FILE *fp = fopen("filename", "wb"); 
    unsigned char b; 
    if (fp == NULL) { 
     fprintf(stderr, "cannot open filename: %s\n", strerror(errno)); 
     exit(1); 
    } 

    for (int i = 0; i < 5; i++) { 
     b |= a[i] << i; 
    } 
    fputc(b, fp); 
    fclose(fp); 

    return 0; 
} 
+0

我的意思是我有一個數字,如13,其二進制格式是0000 1101。事實上,我只希望有效二進制1101,前四個零應刪除,所以我可以減少到8位4個比特。 – Varrian

+1

@Varrian:你的解釋仍撲朔迷離。你是否希望文件包含4個字節,其中有效位值從最重要到最不重要? – chqrlie

+0

我發現我的錯誤,不是任何位數的可寫入文件。我必須將多個字節寫入文件。 – Varrian

相關問題