Как хранить двоичные строки, в двоичном виде, в файле? - PullRequest
3 голосов
/ 19 апреля 2010

У меня проблема с хранением двоичной строки.Как я могу сохранить двоичную строку "100010101010000011100" в двоичном виде в файле с использованием C?

Помимо одной строки, если у меня есть две строки, как я могу сохранить эти две строки вместе?Спасибо за вашу помощь.

Ответы [ 4 ]

2 голосов
/ 19 апреля 2010

Вы можете вставить 8 бит в переменную unsigned char и записать это в файл.

unsigned char ch=0;
char bin[] = "100010101010000011100";
int i=0;

while(bin[i]) {
  if(i%8 == 0) {
    // write ch to file.
    ch = 0;
  }else {
   ch = ch | (bin[i] - '0');
   ch = ch << 1;
  }
  i++;
}
0 голосов
/ 19 апреля 2010

Этот поддерживает двоичные строки произвольной длины, но, конечно, имеет много недостатков, особенно. при рассмотрении чтения обратно из файла. :) Впрочем, для начинающего должно хватить.

#include <string.h>
#include <fcntl.h>
#include <stdlib.h>

char A[]="111100000000111111";

int main() {
    unsigned int slen = strlen(A);
    unsigned int len = slen/8 + !!(slen%8);
    unsigned char * str = malloc(len);

    unsigned int i;
    for (i = 0; i < slen; i++) {
        if (!(i%8))
            str[i/8] = 0;
        str[i/8] = (str[i/8]<<1) | (A[i] == '1' ? 1 : 0);
    }
    if (slen%8)
        str[len-1] <<= (8-slen%8);

    int f = open("test.bin", O_CREAT | O_TRUNC | O_WRONLY, S_IRWXU);
    write(f, str, len);
    close(f);
};
0 голосов
/ 19 апреля 2010

Открыть файл для записи в двоичном режиме.

Преобразуйте вашу двоичную строку в целое и запишите ее в файл

0 голосов
/ 19 апреля 2010

Хм, я не уверен, что понимаю ваш вопрос. Вы спрашиваете, КАК сохранить строку в файле, используя C, или вы спрашиваете, как лучше кодировать двоичные данные для хранения файлов?

Если первое, я предлагаю следующие ресурсы:

Если последнее, то существует множество методов и стандартов кодирования, но, честно говоря, я не понимаю, почему вы не просто храните свою двоичную строку как есть.

РЕДАКТИРОВАТЬ: Подумайте еще раз, очевидным решением будет преобразовать ваше двоичное число в целое или шестнадцатеричное и сохранить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...