Если вы хотите записать 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. взгляните на исходное сообщение –
Hm. Почему редактировалось? Редактирование явно противоречиво. @dbush –