修改的判断mp3文件方法

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值