// fopen_s.cpp : 定义控制台应用程序的入口点。
//
//#define _CRT_SECURE_NO_WARNINGS 1
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
//#include "fopen_s.h"
#define length_data 1024*1024*1 //1M
unsigned char buffer[length_data];
//将一个byte的in_char分解成高8位和低8位,分别存入out_char_a和out_char_b
void UCharToHexChar(unsigned char in_char, unsigned char &out_char_a, unsigned char &out_char_b)
{
char const hex_chars[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
out_char_a = hex_chars[(in_char & 0xF0) >> 4];
out_char_b = hex_chars[(in_char & 0x0F) >> 0];
}
void main()
{
unsigned char err;
unsigned char temp, temp1, temp2;
unsigned int count;
unsigned int i;
count = 0;
FILE *fp_in;//文件指针
const char* file_in_path = "./test.jpg"; //源文件
err = fopen_s(&fp_in, file_in_path, "rb"); //按二进制打开文件,只读
if (err != NULL) //打开文件出错。
return;
FILE *fp_out;//文件指针
const char* file_out_path = "./DATA.TXT"; //建立新文件
err = fopen_s(&fp_out, file_out_path, "w+"); //打开一个空的文件进行读写。如果该文件存在,其内容将被销毁。即先删除,后建立
if (err != NULL) //打开文件出错。
return;
FILE *fopen_out;
const char *fopen_out_path = "fopen_out_bin.jpg"; //建立新文件
err = fopen_s(&fopen_out, fopen_out_path, "wb+"); //指定文件名和文件内容格式为二进制,并且可读写
if (err != NULL)
{
return;
}
while (1)
{
if (fscanf_s(fp_in, "%c", &temp) == EOF) //将文件中的内容读入temp中,fp_in--->test.jpg
break;
buffer[count] = temp; //将temp的同容--->buffer
count++;
UCharToHexChar(temp, temp1, temp2); //将一个byte的temp分解成高8位和低8位
fprintf(fp_out, "%c%c ", temp1, temp2); //fp_out--->DATA.TXT,将内容以字符型写入文件DATA.TXT中,格式为字符型
//printf("%c%c %X\n", temp1, temp2, temp);
}
buffer[6] = 0xFF; //故意改变图片中某两个字节,测试是否影响图片质量
buffer[7] = 0xFF; //故意改变图片中某两个字节,测试是否影响图片质量
buffer[8] = 0xFF; //故意改变图片中某两个字节,测试是否影响图片质量
buffer[9] = 0xFF; //故意改变图片中某两个字节,测试是否影响图片质量
for (i = 0; i < count; i++)
{
fprintf(fopen_out, "%c", buffer[i]); //fopen_out--->"fopen_out_bin.jpg",将buffer中的内容送入fopen_out_bin.jpg中
}
fclose(fopen_out);
fclose(fp_out);
return ;
}
|