문제

mp3 파일의 ID3V2 헤더를 읽으려고 합니다.ID3을 가져오거나 인쇄할 수 있고 char 유형인 "version"과 "subversion"을 인쇄하고 싶지만 필요한 것을 얻을 수 없습니다.

코드는 다음과 같습니다.

    }
    .....
    fseek(file,0,SEEK_SET); 
    fread(&tag.TAG, 1, sizeof(tag),file); // tag is structure with elements of header

    if(strncmp(tag.TAG,"ID3", 3) == 0)
    {
        fread(&tag.version,1, sizeof(tag),file);
        fread(&tag.subversion,1, sizeof(tag),file);

    printf("ID3v2.%s.%s", tag.version, tag.subversion);
   }
}

ㅏ.

도움이 되었습니까?

해결책

헤더는 한 번만 읽어야 합니다.즉.당신이 가지고 있다면

struct id3v2hdr {
    char TAG[3];
    unsigned char version;
    unsigned char subversion;
    ...
}

귀하의 코드는 다음과 같습니다

fseek(file,0,SEEK_SET); 
fread(&tag.TAG, 1, sizeof(tag),file); // tag is structure with elements of header

if(strncmp(tag.TAG,"ID3", 3) == 0)
{
    printf("ID3v2.%hhd.%hhd", tag.version, tag.subversion);
}

참고하세요 version 그리고 subversion 인쇄 가능한 문자가 아닌 바이트 크기의 정수이므로 사용해야 합니다. %hhu (%hhd 서명된 경우)를 형식 사양으로 사용합니다.

또한 구조체의 첫 번째 요소에 대한 포인터와 구조체에 대한 포인터가 동일하게 비교되므로 fread 행 :

fread(&tag, 1, sizeof(tag),file); // tag is structure with elements of header

불필요합니다(의도를 훨씬 더 명확하게 표시하기는 어렵습니다).

다른 팁

충분한 바이트를 읽고 있습니까?tag.TAG의 주소를 전달하지만 sizeof (tag.TAG)가 아닌 sizeof (tag)를 제공합니다.

이것은 %c가 아닌 char를 인쇄하기위한 %s입니다 (null로 끝나는 char*를 인쇄하는 데 사용됨) : 라코 디스

바이트를 숫자로 보려면 %d를 사용하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top