Чтение файла в виде байтового массива

У меня есть назначение для кодирования алгоритма Хаффмана. У меня возникла вся проблема в моей голове, но у меня проблемы с обработкой файлов.

Проблема заключается в том, что алгоритм должен сжимать файл ЛЮБОЙ.

Мое решение: прочитайте файл как массив байтов, затем с int array[256]={0} для каждого байта, получите его int n соответствующее значение и увеличьте array[n]. Если бы я не дал понять, дайте мне знать.

Итак, я много исследовал, но не понимаю, как получить байты из ЛЮБОГО типа файлов и как их обрабатывать.

Ответы

Ответ 1

FILE *fileptr;
char *buffer;
long filelen;

fileptr = fopen("myfile.txt", "rb");  // Open the file in binary mode
fseek(fileptr, 0, SEEK_END);          // Jump to the end of the file
filelen = ftell(fileptr);             // Get the current byte offset in the file
rewind(fileptr);                      // Jump back to the beginning of the file

buffer = (char *)malloc((filelen+1)*sizeof(char)); // Enough memory for file + \0
fread(buffer, filelen, 1, fileptr); // Read in the entire file
fclose(fileptr); // Close the file

Теперь у вас есть массив байтов, содержащий содержимое файла.

Ответ 2

Как насчет бинарного файла IO:

  FILE *f=fopen("example.bin","rb");
  char c;
  //loop for each byte to the end
  {
    size_t fread(&c, (size_t)1, (size_t) 1, f);
    array[c]++;
  }

Или что-то вдоль линий!