簡體   English   中英

c-從char讀取單個字符

[英]c - Reading individual characters from a char

我正在使用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的數組值?

如果您正在尋找一種方便的方法來檢查文件是否以“ RIFF”開頭,那么可能會有一種更方便的方法來查找。 由於ChunkID的長度為4個字節,因此您可能希望將期望的“ RIFF”存儲在也是4個字節(而不是長度為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()函數本身中,從而擺脫困境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM