c++ - 在 C++ 中解析 .wav 文件的数据夹盘
问题描述
我正在使用 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);
}
推荐阅读
- typescript - 如何将 dojo (TypeScript) 项目从代码沙箱克隆到我的服务器?
- git - 如何撤消“git remote add”语句?
- java - 在 XRP 中,当源账户 = 目标账户和 sourceTag != destinationTag 时,错误是 temREDUNDANT(向自己发送相同的货币。)
- python-3.x - 点击后获取网络流量
- testing - 在 Katalon 移动自动化中使用定位器
- oracle - 有没有办法将具有大 CLOB 条目的表导出到平面文件?
- javascript - 如何确保 Math.acos 在 [-1..1] 范围内获取值
- android - 在android ImageView中加载高度太大的位图
- asp.net - 是否可以使用 EF (Entity Framework) Core 将在 asp.net core mvc 中创建的数据库连接到 Azure 云以进一步集成
- r - 根据其他列中的值和因子变量创建新列