如何将二进制数组放入二进制文件中

时间:2016-07-28 21:06:50

标签: c binary data-compression

我有一个数组:

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

当使用循环将每个元素放入文本文件时,文件的大小将为5个字节。所以我想把这五个元素放到一个二进制文件中,这样大小就是5位。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

如果要向文件写入5个字节,则应使用类型#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; } 并将输出文件打开为二进制文件:

#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;
}

你的问题很混乱:

  

所以我想把五个元素放到一个二进制文件中,这样大小就是5位

在大多数系统上,您不能将单个位写入文件,文件大小不以位表示,而是以字节表示,通常为8位宽。您可以将一个字节的5位设置为指定的值,但您必须确定如何对一个字节中的位进行编号...

如果位从最低有效位到最高有效位,则以下是如何执行此操作:

{{1}}