读取MP3歌曲信息时遇到了问题
最近在做一个音乐播放器,想获取MP3文件的一些信息,诸如歌手,专辑之类的。
但是在编写这个函数的时候遇到了一些小问题,无奈求解。
void fGetMusicInfo(HWND hwnd)
{
HANDLE hFile;
int iFileLength;
PBYTE pBuffer;
DWORD dwBytesRead;
int iCmpResult;
TCHAR szTag[]=TEXT("ID3");
if (INVALID_HANDLE_VALUE==(hFile=CreateFile(TEXT("E://Summer.mp3"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
return;
}
iFileLength=GetFileSize(hFile,NULL);
pBuffer=malloc(iFileLength+2);
ReadFile(hFile,pBuffer,iFileLength,&dwBytesRead,NULL);
CloseHandle(hFile);
pBuffer[3]='\0';
//#ifdef UNICODE
//pBuffer[6]='\0';
//pBuffer[7]='\0';
//#else
//pBuffer[3]='\0';
//#endif
iCmpResult=CompareString(LOCALE_USER_DEFAULT,NORM_IGNOREWIDTH,pBuffer,_countof(pBuffer),szTag,_countof(szTag));
if (CSTR_EQUAL==iCmpResult)
{
//MessageBox(NULL,TEXT(""),NULL,MB_OK);
}
}
1、调试我发现pBuffer指向的开头三个字符也是ID3,为什么和szTag比较后结果是不相等呢?
2、UNICODE一个字符两个字节,那为什么pBuffer[0]这一个字节就可以放I这个字符呢?
求解,不胜感激!
[解决办法]
具体的解析还是参考ID3的SPEC规范来吧,这样可以较好的解析各种信息。参考地址:
http://id3.org/Developer%20Information