【发布时间】:2016-01-09 21:08:44
【问题描述】:
这听起来可能有点奇怪,或者问题可能是一个微不足道的问题,但在我生命的大部分时间里,我都在用 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)。感谢您的帮助。
【问题讨论】:
-
你可能想要的是
if(memcmp(wavHeader.RIFF,"RIFF",4) == 0) -
是的,这行得通。谢谢你。顺便问一下,有没有其他解决方案,包括不包括 memory.h?
-
当然你也可以
if(wavHeader.RIFF[0] == 'R' && wavHeader.RIFF[1] == 'I' && wavHeader.RIFF[2] == 'F' && wavHeader.RIFF[3] == 'F') -
非便携式解决方案,需要
RIFF正确对齐:*(int*)RIFF == 'RIFF'或*(int*)RIFF == 'FFIR',具体取决于字节序。为了使其更便携:*(int*)RIFF == 0x46464952