#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#define u8 unsigned char
u8 str2int(u8 buf0 , u8 buf1){
u8 tmp , tmp1 , tmp2 ;
if( buf0>='0' && buf0 <= '9'){
tmp1 = buf0 - '0' ;
}else if(buf0>= 'a' && buf0 <= 'z'){
tmp1 = buf0 - 'a' + 10;
}
if( buf1>= '0' && buf1 <= '9'){
tmp2 = buf1 - '0' ;
}else if(buf1>='a' && buf1 <= 'z'){
tmp2 = buf1 - 'a' + 10;
}
//printf("tmp1:%d - tmp2:%d \n" , tmp1 , tmp2) ;
tmp = tmp1*16 + tmp2 ;
return tmp ;
}
int main()
{
int size = 0 , index=0;//用于判断是否读取结束的
u8 buf[100] = {0} , tmp , tmp1;//字符类型只有1字节,可以将各个类型的拿出来
char buffer , buffer1 ;
FILE *p_src = NULL, *p_dest = NULL;
//打开第一个文件,即已存在的文件
p_src=fopen("src.txt", "rb");//不知道是文本还是二进制,所以统一用二进制
if(!p_src) {
return 0;
}
//打开第二个文件,不存在的文件
p_dest = fopen("dst.jpg", "wb");//以二进制打开,不能用a方式
if(!p_dest) {
fclose(p_src);//当打开目标文件出错时,原始文件已经打开了,这里会直接结束程序,所以应该结束原始文件
p_src = NULL;
return 0;
}
while(1) {
size = fread(&buffer, 1 , 1 , p_src);//一次存储100字节整数倍,导致原目大小不一致,所以在存的时候用size
if( buffer == 0x20 || buffer == 0x0d || buffer==0x0a){
continue ;
}
size = fread(&buffer1, 1 , 1 , p_src);
//printf(" - 0x%c%c - \n" , buffer , buffer1) ;
tmp = (u8)str2int(buffer , buffer1) ;
//printf(" > 0x%02x < \n" , tmp) ;
fwrite(&tmp, sizeof(char), 1, p_dest);
index++ ;
if(tmp1 == 0xff && tmp == 0xd9){
printf("jpeg end ! \n") ;
break ;
}
tmp1 = tmp ;
}
fclose(p_src);
p_src = NULL;
fclose(p_dest);
p_dest = NULL;
return 0;
}
str data -> jpeg
最新推荐文章于 2024-06-18 16:09:53 发布