读取MP3(ID3v2)文件属性时,中文歌曲显示乱码,求各位大牛指导啊!

wuxian000 wuxian000 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟最近在提取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);
}
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
wuxian000
C++ 语言 65,214 成员 250,514 内容