在 C++ 中解析 .wav 文件的数据卡盘
Parsing Data chuck of a .wav file in c++
我正在使用 SHA1 哈希来验证 .wav
文件的真实性。我使用的 SHA1 函数接受三个参数:
- 指向具有
.auth
扩展名的身份验证文件的指针
- 从
.wav
文件中读取的数据缓冲区(大小必须小于42000字节)
- 缓冲区的长度
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);
}
我正在使用 SHA1 哈希来验证 .wav
文件的真实性。我使用的 SHA1 函数接受三个参数:
- 指向具有
.auth
扩展名的身份验证文件的指针 - 从
.wav
文件中读取的数据缓冲区(大小必须小于42000字节) - 缓冲区的长度
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);
}