#include
<
stdio.h
>
#include
<
io.h
>
#include
<
string
.h
>
#include
<
stdlib.h
>
void
main()

...
{
FILE *fp;
bool is_mp3 = false;
unsigned char* cBuffer;
int cBuffer_size=1024, i = 0;
char LayerDescript, bRateIndex, bSampleRate;
long int flength;

char argv[]=...{"妃子笑"};

/**//*######################Symbol Above###################################*/

if((fp=fopen(argv,"rb")) ==NULL) ...{
printf("open file err! "); exit(1);
}

/**//*###################### (mp3_FrameHeader) Reading #######################*/
fseek(fp, 0L, SEEK_END); //移文件指针到文件尾
flength = ftell(fp); //文件长

rewind(fp);
fseek(fp,10,1);
while((ftell(fp)+4)<flength)

...{
if (ftell(fp)+1024<=flength)
cBuffer_size=1024;
else
cBuffer_size=flength-ftell(fp);

cBuffer=(unsigned char *)malloc(cBuffer_size);
if (cBuffer==NULL)// 检测动态内存分配是否已经成功

...{
if (fp!=NULL) fclose(fp);
printf("ERROR:Memory Exhausted!");
exit(1);
}
memset(cBuffer,0,cBuffer_size);
fread(cBuffer,cBuffer_size,1,fp);

for(i=0;i<(cBuffer_size-4); i++) ...{
LayerDescript = (cBuffer[i+1] & 0x6)>>1;
bRateIndex = cBuffer[i+2] /0x10;
bSampleRate = (cBuffer[i+2] & 0xA) >>2;


if (cBuffer[i] ==0xFF
&& cBuffer[i+1] > 0xE0
&& bRateIndex != 0xF
&& LayerDescript != 0x0
&& bSampleRate < 0x3) ...{
is_mp3 = true;
cBuffer_size=-1;
break;
}
}
free(cBuffer);
if (cBuffer_size ==(-1) ) break;
}
fclose(fp);

if (is_mp3) ...{
printf("It's a mp3 file! ");
}
getchar();
}
源自:
http://hi.baidu.com/hmos/blog/item/e34a7bf0e4e5a4c27931aabe.html