有一个数组:我如何把二进制数组转换成二进制文件
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 –