2014-06-17 2 views
-4

이진 파일로 PNG 파일을 읽었을 때 16 진수를 다른 일반 txt 또는 다른 파일에 쓰는 방법을 알고 있다면 어떻게 그 16 진수로 PNG 파일을 다시 만들 수 있습니까? C++ 알려진 데이터가있는 PNG 파일을 만드는 방법은 무엇입니까?

내가 PNG 파일에서 읽고 다른 일반 txt 파일에 기록하는 데 사용하는 코드입니다 :

unsigned char x; 
ifile.open("foo.png",ios::binary); 
ifile>>noskipws>>hex; 
while(ifile>>x){ 
    ofile<<setw(2)<<setfill('0')<<(int)x; 
    //do some formatting stuff to the ofile, ofile declaration omitted 
    //some ifs to see if IEND is read in, which is definitely correct 
    //if IEND, break, so the last four hex numbers in ofile are 49 45 4E 44 
} 
//read another 4 bytes and write to ofile, which are AE 42 60 82, the check sum 
좀 관련이없는 메시지가 일부 PNG 파일을 가지고 있기 때문에 나는이 일을하고있는 이유는

IEND 청크 후, 나는 그들을 제거하고 단지 실제 그림과 관련된 청크를 유지하고 다른 파일로 분할 싶습니다. "관련없는 메시지"란 그림의 실제 부분이 아니라 다른 용도로 사용하는 것을 의미합니다.

+2

이 질문은 png와 같은 이진 파일이 사람이 읽을 수있는 16 진수 목록과 같은 것으로 잘못 가정 한 것으로 보입니다. –

+0

이 코드 조각은 의도 한대로 작동하며 PNG 파일의 16 진수가있는 일반 텍스트 파일을 출력합니다. 나는 16 진수 판독기를 가지고 있는데, 그것이 올바른 것을 출력하고 있다는 것을 확인할 수 있습니다. PNG 파일을 만드는 방법을 함께 모으는 방법을 모르겠습니다. @DrewDormann – user3238850

+0

작업을 그냥 뒤집으십시오. 2 문자를 읽고 2 진수로 변환하십시오. –

답변

1

두 개의 문자를 모두 읽고 16 진수에서 2 진수로 변환하면됩니다.

unsigned char x; 
char buf[3] = {0}; 
ifile.open("foo.hex"); 
while(ifile>>buf[0]>>buf[1]){ 
    char *end; 
    x = (unsigned char) strtol(buf, &end, 16); 
    if (*end == 0) // no conversion error 
     // output the byte 
관련 문제