我想编写一个可以读取文件的程序,让我们说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;
以上代码输出二进制字符串,例如:&#34; 1110011101101 ....&#34;。
这将是第一部分。第二部分是获取该字符串并创建一个文件。这可能吗?
感谢。
答案 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
找到strcat
和string.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.