有一個數組:我如何把二進制數組轉換成二進制文件
int a[5] = { 1, 0, 0, 1, 1 };
當使用循環的每個元素放到一個文本文件,該文件的大小爲5個字節。所以我想把這五個元素放到一個二進制文件中,這樣大小就是5位。我怎樣才能做到這一點?
有一個數組:我如何把二進制數組轉換成二進制文件
int a[5] = { 1, 0, 0, 1, 1 };
當使用循環的每個元素放到一個文本文件,該文件的大小爲5個字節。所以我想把這五個元素放到一個二進制文件中,這樣大小就是5位。我怎樣才能做到這一點?
如果你想要寫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;
}
只是把它'fwrite'到一個二進制文件..真的,這是什麼問題? –
@EugeneSh。看看原帖 –
哼。爲什麼編輯呢?編輯顯然是相互衝突的。 @dbush –