这听起来可能有点奇怪,或者问题可能是微不足道的,但是在我一生的大部分时间里,我都在用PHP编程(是的,我知道它的发音).因此,当我切换到C语言时,对我来说有些陌生(由于php习惯).
因此,我正在使用struct加载wav标头数据.值定义为uint8_t类型:
typedef struct WAV_HEADER
{
uint8_t RIFF[4]; // RIFF
uint8_t WAVE[4]; // WAVE
}
我必须将它们与四个字母的字符串进行比较,例如:
if(wavHeader.RIFF[0] . wavHeader.RIFF[1] . wavHeader.RIFF[2] . wavHeader.RIFF[3] == 'RIFF')
{ do sth }
这应该很容易检查加载的文件是否为Wave文件(* .wav).谢谢你的帮助.
解决方法:
C和C中的字符串为null-terminated.从技术上来说,RIFF和WAVE并不是C风格的字符串,因为没有空终止符,因此您不能像strcmp那样仅使用简单的C/C++风格的字符串比较.但是,有几种方法可以将它们与所需的字符串进行比较:
>如果(header.RIFF [0] ==’R’&
header.RIFF [1] ==’I’&
header.RIFF [2] ==’F’&
header.RIFF [3] ==’F’){// ..}
>如果(strncmp((const char *)header.RIFF,“ RIFF”,4)== 0){// ..}
>如果(memcmp(header.RIFF,“ RIFF”,4)== 0){// ..}
我个人将使用strncmp或memcmp.他们最终做同样的事情,但是从语义上讲strncmp是一个字符串比较函数,可以使代码更清晰.
对于strncmp,请参见here.
对于memcmp,请参见here.
标签:c,wav 来源: https://codeday.me/bug/20191013/1904475.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。