You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中.wav文件分块读取循环调用SHA1校验的实现方法问询

分块读取WAV文件计算SHA1哈希实现方案

核心逻辑说明

标准C/C++的文件流操作会自动维护文件内部指针偏移,每次读取操作完成后指针会自动跳转到已读内容的下一个字节位置,不需要手动计算偏移量。直接用fread批量读取即可,比逐字节调用fgetc的效率高很多。

实现代码

// 定义缓冲区最大长度,满足小于42000字节的要求
#define BUF_MAX_SIZE 42000
// 分配缓冲区
unsigned char DataBuffer[BUF_MAX_SIZE];
size_t read_bytes;

// 循环读取直到文件结束
while ((read_bytes = fread(DataBuffer, 1, BUF_MAX_SIZE, WavResult)) > 0) {
    // 传入实际读取的字节数计算SHA1
    util_sha1_calculate(&AuthContext, DataBuffer, read_bytes);
}

关键注意点

  • fread的第二个参数是单个元素的大小,第三个参数是要读取的元素数量,这里设置单个元素为1字节,最多读42000个元素,返回值read_bytes就是实际读到的字节数
  • 最后一次读取时如果剩余文件内容不足42000字节,read_bytes会返回剩余的实际字节数,直接传入SHA1函数即可,不会影响哈希计算结果
  • 如果需要先跳过WAV的文件头只计算数据块的哈希,只需要在进入循环前用fseek把文件指针跳到数据块的起始位置即可,后续循环的读取逻辑不需要修改

内容的提问来源于stack exchange,提问作者Omar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:45:03