这可能听起来有些奇怪或者问题可能是微不足道的,但在我生命的大部分时间里,我使用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),应该很容易检查。谢谢你的帮助。
答案 0 :(得分:3)
C和C ++中的字符串是null-terminated。 RIFF
和WAVE
在技术上不是C风格的字符串,因为没有空终止符,所以你不能只使用简单的C / C ++风格的字符串比较,如{{1 }}。但是,有几种方法可以将它们与您想要的字符串进行比较:
strcmp
if (header.RIFF[0] == 'R' &&
header.RIFF[1] == 'I' &&
header.RIFF[2] == 'F' &&
header.RIFF[3] == 'F') { // .. }
if (strncmp((const char*)header.RIFF, "RIFF", 4) == 0) { // .. }
我个人会使用if (memcmp(header.RIFF, "RIFF", 4) == 0) { // .. }
或strncmp
。他们最终做了同样的事情,但语义上memcmp
是一个字符串比较函数,它可能使代码更清晰。