FileToData與DataToFile(優化版,txt爲原始文件2倍大小)

void FileToData(char *pSrcFileName,char *pDstFileName)
{
	FILE *pSrcFile = fopen (pSrcFileName, "rb" );
	FILE *pDstFile = fopen(pDstFileName,"wb");

	if (pSrcFile == NULL)
	{
		fputs ("Error: invalid source file!",stderr);
	}

	long lSize;
	unsigned char * buffer;
	size_t result;
	int i = 0;

	//獲取文件大小
	fseek (pSrcFile , 0 , SEEK_END);
	lSize = ftell (pSrcFile);
	rewind (pSrcFile);

	// 分配內存存儲整個文件 
	buffer = (unsigned char*) malloc (sizeof(unsigned char)*lSize);
	if (buffer == NULL)
	{
		fputs ("Memory alloc error!",stderr); 
	}

	//將文件拷貝到buffer中
	result = fread (buffer,1,lSize,pSrcFile);
	if (result != lSize)
	{
		fputs ("Reading error",stderr);
		exit (3);
	}

	for (i = 0; i < lSize; i++)
	{
		fprintf(pDstFile,"%.2x",buffer[i]);
	}

	// 關閉文件並釋放內存
	fclose (pSrcFile);
	fclose(pDstFile);
	free (buffer);
}


int chToData(char ch)
{
	int data = 0;
	switch(ch)
	{
	case '0':
		data = 0;
		break;
	case '1':
		data = 1;
		break;
	case '2':
		data = 2;
		break;
	case '3':
		data = 3;
		break;
	case '4':
		data = 4;
		break;
	case '5':
		data = 5;
		break;
	case '6':
		data = 6;
		break;
	case '7':
		data = 7;
		break;
	case '8':
		data = 8;
		break;
	case '9':
		data = 9;
		break;
	case 'a':
		data = 10;
		break;
	case 'b':
		data = 11;
		break;
	case 'c':
		data = 12;
		break;
	case 'd':
		data = 13;
		break;
	case 'e':
		data = 14;
		break;
	case 'f':
		data = 15;
		break;

	default:
		break;
	}

	return data;
}

//pSrcFileName使用txt文本文檔
void DataToFile(char *pSrcFileName,char *pDstFileName)
{
	FILE *fToBeWrite = fopen(pDstFileName,"wb");

	ifstream in(pSrcFileName);
	unsigned char ch = 'a';
	char chHigh;
	char chLow;
	int numHigh;
	int numLow;
	int num = 0;

	while (in >> chHigh >>chLow)
	{
		numHigh = chToData(chHigh);
		numLow = chToData(chLow);
		num = numHigh * 16 + numLow;			 

		ch = (unsigned char)num;
		fwrite(&ch,1,1,fToBeWrite);
	}	

	in.close();
	fclose(fToBeWrite);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章