2016-07-28 2 views
-1

У меня есть массив:Как поместить двоичный массив в бинарный файл

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

При использовании петли поместить каждый элемент в виде текстового файла, размер файла будет 5 байт. Поэтому я хочу поместить пять элементов в двоичный файл, чтобы размер был 5 бит. Как я могу это сделать?

+0

Просто 'fwrite' это в двоичный файл .. В самом деле, в чем вопрос? –

+0

@EugeneSh. взгляните на исходное сообщение –

+0

Hm. Почему редактировалось? Редактирование явно противоречиво. @dbush –

ответ

2

Если вы хотите записать 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; 
} 
+0

Я имею в виду, что у меня есть число, такое как 13, двоичный формат которого равен 0000 1101. На самом деле, мне нужен только эффективный двоичный код 1101, первые четыре нуля следует удалить, чтобы я мог уменьшить 8 бит на 4 бита. – Varrian

+1

@ Varrian: ваше объяснение по-прежнему запутывает. Вы хотите, чтобы файл содержал 4 байта со значительными значениями бит от наиболее значимого до наименее значимого? – chqrlie

+0

Я считаю своей ошибкой, что в файл не может быть записано ни одного количества бит. Я должен написать несколько байтов в файл. – Varrian

Смежные вопросы