从文件中读取位并将其存储在C中的char数组中

时间:2013-08-12 15:41:49

标签: c arrays file bits

我有一个大文本文件,由每行512位的7000个条目组成,我想读取每一行并将其存储到char数组中,以便我可以进行位操作。

有没有推荐和有效的方法?

2 个答案:

答案 0 :(得分:1)

我会加载整个文件,然后将每个512bit块的指针指向内存中的文件。

但是,如果您想要更好的答案,则需要提供更多信息。


char **load_file(const char *filename) {
   size_t i, j, file_size;
   char *file_ptr;
   char **entries;
   FILE *fd;

   fd = fopen(filename, "r");

   fseek(fd, 0, SEEK_END);
   file_size = ftell(fd);
   rewind(fd);

   file_ptr = malloc(sizeof(char) * file_size);
   fread(file_ptr, file_size, 1, fd);

   fclose(fd);

   /* 64 + 1 because newline is a character */
   entries = malloc(sizeof(char *) * file_size/(64 + 1));
   for (i = j = 0; j < file_size; i++, j += 64 + 1) {
      entries[i] = &file_ptr[j];
   }

   return entries;
} 

答案 1 :(得分:0)

如果您提供了自己的假设或代码,那么我可以更好地指导我的答案,但这是对您的问题的通用答案......


您可以使用fgets(文档here)读取每个精简点上的字节,并使用按位操作来访问每个位。请注意,您可以从fgets读取stdin,以便将文件传输到您的程序(或使用文件读取库来处理它)。

对于字符数组,我建议使用动态数组,而不是有限数组。如果您设置了有限数组,则将其存储在内存池(而不是堆栈)中,因为堆栈容易被大文件溢出(调用堆栈的大小取决于您使用的体系结构)。