c - 从char中读取单个字符

时间:2013-06-26 20:32:39

标签: char wav arrays directsound

我正在使用DirectSound处理一个项目,并且我正在努力使声音文件的头信息传递给处理方法。 WAV文件一开始就有一个RIFF chunkID。在调用ProcessWaveFile方法时,我传递文件路径以及头信息。 'RIFF'chunkID存储在char中。我需要能够根据实际文件chunkID检查chunkID的各个字符,以确保文件正确。这是我的代码片段:

    if((waveFileHeader.chunkId[0] != chunkID[0]) || (waveFileHeader.chunkId[1] != chunkID[1]) ||
    (waveFileHeader.chunkId[2] != chunkID[2]) || (waveFileHeader.chunkId[3] != chunkID[3]))
{
    MessageBox(hwnd, L"ChunkID not in the right Format.", L"Error", MB_OK);
    return false;
}

chunkId是文件的实际ID,而chunkID是通过要检查的函数传递的ID。你可以看到我试图像这里的数组一样处理它。 chunkId存储在char []中。我应该将chunkID存储在数组中吗?我该如何指定它?

    bool ProcessWaveFile(char*, IDirectSoundBuffer8**, HWND, int, char, char, char, char, std::string, int, int);

以上是ProcessWaveFile方法的头文件行。 chunkID被指定为其中一个字符。我可以将它改为char [],但实际调用方法时遇到困难。这是一个示例调用:

    result1 = ProcessWaveFile("../terrain_sky/data/sound01.wav", &m_secondaryBuffer1, hwnd,
    44100, 'RIFF', 'fmt ', 'WAVE', 'data', "WAVE_PCM_FORMAT", 16, 2);

如何在不中断变量链的情况下声明此调用中包含RIFF的数组值?

1 个答案:

答案 0 :(得分:0)

如果您正在寻找一种方便的方法来检查文件是否以“RIFF”开头,那么您可能会有更方便的方法来查找。由于ChunkID长度为4个字节,因此您可能希望将数据类型(也是4个字节长的数据类型)存储在预期的“RIFF”中(而不是长度为4的char数组),然后将前四个字节解析为,例如,一个int。

我有一个以RIFF开头的wav文件,这里是你将前四个字节解释为int时得到的数字。

od -ci -N4 ./test.wav
0000000  R   I   F   F
            1179011410

因此选项-ci首先将每个字节打印为ASCII等效值(RIFF),然后将每组4个字节打印为整数。所以真的,1179011410 ='RIFF',整数可能更容易检查。

但是,除此之外,我不确定为什么需要将'RIFF'传递给ProcessWaveFile()函数。如果您只处理RIFF文件,那么您可能会将这些信息存储在ProcessWaveFile()函数本身中。