如何将二进制数组放入二进制文件
How to put binary array into binary file
我有一个数组:
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;
}
你的问题有点令人困惑:
So I want to put the five elements into a binary file so that the size is 5 bits
在大多数系统上,您不能将单个位写入文件,文件大小不是以位表示,而是以字节表示,通常为 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;
}
我有一个数组:
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;
}
你的问题有点令人困惑:
So I want to put the five elements into a binary file so that the size is 5 bits
在大多数系统上,您不能将单个位写入文件,文件大小不是以位表示,而是以字节表示,通常为 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;
}