编程语言
首页 > 编程语言> > Unix/Linix系统编程第九章学习笔记

Unix/Linix系统编程第九章学习笔记

作者:互联网

Unix/Linix系统编程第九章学习笔记

作者:20191322wyl

知识点总结

I/O库函数与系统调用

I/O库函数的算法

fread算法

fwite算法

fclose算法

关闭文件

I/O库模式

文件结束符通常是返回一个整数-1

格式化I/O

输入:

文件流缓冲

二进制文件和文本文件如何转换?

解决方案:

因为可显示字符有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");
}

运行结果:

  1. 首先找到自己学号姓名的文本和二进制

  2. 然后在虚拟机创建bin.txt文件和text.txt文件,用来存放文本和二进制值

  3. 创建文件bin2textresult.txt和文件text2binresult.txt,用来保存运行结果

  4. 运行代码

  5. 查看运行结果

  6. 比较,结果正确,代码无误。

标签:文件,编程,fopen,二进制,Linix,fclose,char,Unix,txt
来源: https://www.cnblogs.com/BillGreen/p/15312354.html