把本地都是0和1的文本文件存成二进位文件的C语言代码,并写下注释
时间: 2023-11-27 14:49:45 浏览: 32
以下是C语言代码,可以将本地的0和1文本文件转换为二进制文件,其中包含详细的注释说明:
```c
#include <stdio.h>
#include <stdlib.h>
// 文件名定义
#define INPUT_FILE "input.txt"
#define OUTPUT_FILE "output.bin"
// 读取文本文件
char* read_text_file(const char* filename, int* size) {
// 打开文件
FILE* fp = fopen(filename, "rb");
if (!fp) {
printf("Unable to open input file '%s'.\n", filename);
exit(1);
}
// 获取文件大小
fseek(fp, 0, SEEK_END);
*size = ftell(fp);
fseek(fp, 0, SEEK_SET);
// 读取文件内容
char* buffer = (char*)malloc(sizeof(char) * (*size));
fread(buffer, sizeof(char), *size, fp);
fclose(fp);
return buffer;
}
// 写入二进制文件
void write_binary_file(const char* filename, const char* buffer, int size) {
// 打开文件
FILE* fp = fopen(filename, "wb");
if (!fp) {
printf("Unable to open output file '%s'.\n", filename);
exit(1);
}
// 写入文件内容
fwrite(buffer, sizeof(char), size, fp);
fclose(fp);
}
int main() {
int size;
char* buffer = read_text_file(INPUT_FILE, &size);
// 创建新的二进制缓冲区
char* binary_buffer = (char*)malloc(sizeof(char) * size / 8 + 1);
int index = 0;
for (int i = 0; i < size; i += 8) {
// 将8个字符压缩成一个字节
char byte = 0;
for (int j = 0; j < 8; j++) {
byte <<= 1;
byte |= buffer[i + j] - '0';
}
binary_buffer[index++] = byte;
}
// 将二进制缓冲区写入文件
write_binary_file(OUTPUT_FILE, binary_buffer, index);
// 释放内存
free(buffer);
free(binary_buffer);
return 0;
}
```
以上是将本地文本文件转换为二进制文件的C语言代码。