小弟最近在提取MP3 文件属性,提取中文歌曲信息时,获得的标题,作者,专辑等都是乱码,很是无语,求各位大牛指导,非常感谢!
FILE *fp;
fp=fopen("e:\\music\\时光机.mp3","rb");
if(fp==NULL)
{
MessageBox(_T("Can't open file"));
}
else{
//id3v2标签头共10字节
struct ID3V2TagH
{
char Header[3];
char Ver[1];
char Revision[1];
char Flag[1];
char Size[4];
};
//id3v2标签帧
struct ID3V2Frame
{
char frameID[4]; /* 用四个字符标识一个帧,说明其内容,4字节 */
char size[4]; /* 帧内容的大小,不包括帧头,不得小于1,4字节 */
char flags[2]; /* 存放标志,只定义了6 位,2字节 */
};
//标签帧链表
struct ID3V2TagFL
{
char a[200];
};
struct ID3V2TagFL frameBody;
struct ID3V2TagH tagHeader;
struct ID3V2Frame frameHeader;
//memset(&tagHeader, 0, sizeof(struct ID3V2TagH));
//fseek(fp,-128L,SEEK_END);
fread(tagHeader.Header,3,1,fp);//读取前3字节
fread(tagHeader.Ver,1,1,fp);//读取1字节
fread(tagHeader.Revision,1,1,fp);//读取1字节
fread(tagHeader.Flag,1,1,fp);//读取1字节
fread(tagHeader.Size,4,1,fp);//读取4字节
int total_size;
total_size = tagHeader.Size[0]*0x1000000
+tagHeader.Size[1]*0x10000
+tagHeader.Size[2]*0x100
+tagHeader.Size[3];
fread(frameHeader.frameID,4,1,fp);//读取4字节
fread(frameHeader.size,4,1,fp);//读取4字节
fread(frameHeader.flags,2,1,fp);//读取2字节
int fSize;
fSize = frameHeader.size[0]*0x1000000
+frameHeader.size[1]*0x10000
+frameHeader.size[2]*0x100
+frameHeader.size[3];
fread(frameBody.a,fSize,1,fp);//读取fSize字节
CString str;
for(int i = 0; i<fSize;i++)
{
str+= frameBody.a[0];
}
MessageBox(str);
}