作者:20191322wyl
系统调用函数:open()、read()、write()、lseek()、close()
I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()
fopen()函数使用字符串表示模式,"r"表示"read"(可读)、“w”表示"write"表示“write”(可写);
如果有任何fopen()调用失败,程序就会终止
关闭文件
文件结束符通常是返回一个整数-1
输入:
scanf(char *FMT,&items)//从stdin中读取
fscanf(fp,char*FMT,&items)//从流中读取
因为可显示字符有256个,即需要8位二进制才能表示出来,所以文本文件转换为二进制文件就相当于把AscII码字符(10进制)转换成八位2进制,即核心就是10进制转换成2进制的算法,同理,二进制文件转换为文本文件的核心就是2进制转换成10进制。
具体代码看实践
代码:
#include <stdio.h> #include <string.h> #define NSIZE 8 void text2bin(const char* sIn, const char* sOut)// text to bin { int count = 0; int ch,a; char temp; FILE * fin = fopen(sIn, "r"); FILE * fout = fopen(sOut, "w"); while(fscanf(fin, "%c", &temp)!=EOF) { ch=temp; for (a = 7; a >= 0; a--) fprintf(fout, "%d", ch >> a & 1); } fclose(fin); fclose(fout); } void bin2text(const char* sIn, const char* sOut)//bin to text { FILE * fin = fopen(sIn, "r"); FILE * fout = fopen(sOut, "w"); int i = 0, j = 0, iTemp = 0, flag = 0; int ibina[NSIZE]; char cRead[NSIZE]; char str[8]; char cChar; int a=0; while(fscanf(fin, "%c", &str[a%8])!=EOF) { if(a%8==7) { iTemp = 1; cChar = 0; for (j = 7; j >= 0; j--) { cChar += (str[j]-'0') * iTemp; iTemp *= 2; } fprintf(fout, "%c", cChar); } a++; } fclose(fin); fclose(fout); } int main() { bin2text("bin.txt","bin2textresult.txt"); text2bin("text.txt","text2binresult.txt"); }
运行结果:
首先找到自己学号姓名的文本和二进制
然后在虚拟机创建bin.txt文件和text.txt文件,用来存放文本和二进制值
创建文件bin2textresult.txt和文件text2binresult.txt,用来保存运行结果
运行代码
查看运行结果
比较,结果正确,代码无误。