str data -> jpeg

#include 
#include   
#include   
#include   
#include     
#include 

#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)