将uint8_t数据与字符串进行比较

时间:2016-01-09 12:00:57

标签: c++ wav

这可能听起来有些奇怪或者问题可能是微不足道的,但在我生命的大部分时间里,我使用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),应该很容易检查。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

C和C ++中的字符串是null-terminatedRIFFWAVE在技术上不是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是一个字符串比较函数,它可能使代码更清晰。

对于strncmp,请参阅here。 对于strncmp,请参阅here