如何读取文件,将二进制缓冲区转换为二进制字符串,然后在C中再次将二进制字符串转换为二进制缓冲区?

时间:2016-05-19 16:26:44

标签: c string file binary

我想编写一个可以读取文件的程序,让我们说myfile.bin,将缓冲区转换为二进制文件' string' (" 101110111011 ..."),将其存储在char *变量中。后来,我希望能够转换那个二进制字符串'再次进入二进制缓冲区并创建另一个文件,让我们说myanotherfile.bin,与第一个文件的内容完全相同。

请注意,我不是要尝试从文件中读取文本。

我看到很多人都在谈论如何做第一部分,但是直到现在,我还没有找到任何人谈论第二部分(如何从之前创建的二进制字符串创建二进制文件)文件)。

更新

这是我用来读取文件并生成'二进制字符串的代码':



#import <stdio.h>
#import <limits.h>
#import <stdlib.h>

int main() {
  char buffer[32];
  FILE *file = fopen("myfile.bin","rb");
  if (file == NULL) { fclose (file); }

  size_t count;
  while ((count = fread(buffer, sizeof buffer[0], sizeof buffer, file)) > 0) {
    for (size_t j = 0; j < count; j++ ) {
      for (int i = CHAR_BIT-1; i >= 0; i--) {
        fputc(buffer[j] & (1u << i) ? '1' : '0', stdout);
      }
    }
  }
  fclose(file);

  return 0;
}
&#13;
&#13;
&#13;

以上代码输出二进制字符串,例如:&#34; 1110011101101 ....&#34;。

这将是第一部分。第二部分是获取该字符串并创建一个文件。这可能吗?

感谢。

2 个答案:

答案 0 :(得分:1)

也许你需要这样的东西:

  • 首先阅读你的文件并将所有文件保存在一个字符串中。

  • 然后你可以调用这个函数:

    char * string_to_binarystring(char* s,int size)
    {
       char output[9];
       char * return_str = malloc(size*8+1);
       return_str[0] = '\0';
       while (*s)
       {
          itoa(*s, output, 2);
    
          strcat(return_str,output);
          ++s;
       }
       return return_str;
    }
    

    例如以这种方式:

    char string[] = "Hello World";
    
    puts(string_to_binarystring(string,strlen(string)));
    
    • 最后将您的字符串打印到文件中。

<强>提示

要写入二进制文件,您需要:

    char mystring[] = "Hello World";
    FILE *ptr_myfile;

    ptr_myfile=fopen("test.bin","wb");
    if (!ptr_myfile)
    {
        printf("Unable to open file!");
        return 1;
    }

    fwrite(mystring, strlen(mystring), 1, ptr_myfile);

    fclose(ptr_myfile);

N.B。您可以在strlen找到strcatstring.h

修改

要将文件重写为二进制文件,您需要将二进制字符串转换为原始字符串(您从文件中读取)。

您可以使用此功能:

char * binarystring_to_string(char* s,int size){
    char * return_str = malloc(size/8+1);
    int i;
    char * end;


    for(i = 0; i < size/8; i++){
        return_str[i] = bits_to_char(s);
        printf("\n%c",bits_to_char(s));
        s+=8;
    }
    return_str[i] = '\0';
    return return_str;
}

对于作品需要使用它:

char bits_to_char(char * num){
 unsigned char result = 0;
 int i;
 for ( i = 0; i < 8; ++i )
    result |= (num[i] == '1') << (7 - i);
 return result;
}

答案 1 :(得分:-1)

很明显:在相反的方向做,比如十进制,但功率为2: 0b10101010转换为unsigned int,如下所示: 2 ^ 8 * 1 + 2 ^ 7 * 0 + 2 ^ 6 * 1 + ... + 2 ^ 1 * 1 + 2 ^ 0 * 0.