我必须解析wav文件(plain C)并验证一些参数以传递下一个函数。其中一个是采样率,在if语句中使用位置进行多次测试并不是很短:
#define WAV_ALLOWED_SAMPLE_RATE (48000)
if(wavFile.Header.SampleRate != WAV_ALLOWED_SAMPLE_RATE) /* Sample Rate */
return WAV_HDR_CHUNK_FMT_INVALID_SAMPLE_RATE;
有一种简单的方法可以测试我想在设计时预先定义的多个值吗?像这样:
#define WAV_ALLOWED_SAMPLE_RATE (11025 || 22050 || 44100 || 48000)
可能是2,3或4个值,具体取决于项目需求。
提前致谢,
答案 0 :(得分:2)
在Wave Format Standard中,采样率是一个32位整数。因此,如果您将其读入int
,则可以轻松使用if
语句和整数相等比较。最简单的陈述,基于您的输入:
int R = wavFile.Header.SampleRate;
if ( (R != 48000) && (R != 44100) && (R != 22050) && (R != 11025) )
return WAV_HDR_CHUNK_FMT_INVALID_SAMPLE_RATE;
答案 1 :(得分:0)
#define WAV_ALLOWED_SAMPLE_RATE (11025 || 22050 || 44100 || 48000)
if(wavFile.Header.SampleRate != WAV_ALLOWED_SAMPLE_RATE) /* Sample Rate */
return WAV_HDR_CHUNK_FMT_INVALID_SAMPLE_RATE;
此代码不会按您的意愿运行。值(11025 || 22050 || 44100 || 48000)
将被解释为1
,从而伪造if条件......
您可以编写一个简单的函数来检查所有4个值,或者在代码中按原样执行