在 C++ 中解析 .wav 文件的数据卡盘

Parsing Data chuck of a .wav file in c++

我正在使用 SHA1 哈希来验证 .wav 文件的真实性。我使用的 SHA1 函数接受三个参数:

  1. 指向具有 .auth 扩展名的身份验证文件的指针
  2. .wav文件中读取的数据缓冲区(大小必须小于42000字节)
  3. 缓冲区的长度
for (int i = 0; i < size_buffer; i++) {
    DataBuffer[i] = fgetc(WavResult);
}
util_sha1_calculate(&AuthContext, DataBuffer, size_buffer);

如何设置读取功能读取42000字节,将数据传输到util_sha1_calculate(&AuthContext, DataBuffer, size_buffer),并在重复循环时从停止的位置开始,然后继续读取下一个42000字节?

您可以将显示的 for 循环放在另一个运行到 EOF 之前的外部循环中,例如:

size_t size;
int ch;

while (!feof(WavResult))
{
    size = 0;
    for (int i = 0; i < size_buffer; i++) {
        ch = fgetc(WavResult);
        if (ch == EOF) break;
        DataBuffer[size++] = (char) ch;
    }
    if (size > 0)
        util_sha1_calculate(&AuthContext, DataBuffer, size);
}

但是,您应该考虑将内部 for 循环替换为对 fread() 的单个调用,例如:

size_t nRead;
while ((nRead = fread(DataBuffer, 1, size_buffer, WavResult)) > 0)
{
    util_sha1_calculate(&AuthContext, DataBuffer, nRead);
}