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

如何正确解析反编译得到的WAVEFORMATEX原始字节数据?

1999年Win32游戏反编译中的ADPCM格式解析问题

我正在处理一个1999年左右的Win32反编译游戏代码库,其中提取到一段从二进制中直接获取的字节序列:

static char source_pcm_format[50] =
{
    2, 0, 1, 0, 34, 86, 0, 0, 147, 43, 0, 0, 0, 2, 4, 0, 32, 0, 244, 3, 7, 0, 0, 1, 0, 0, 0, 2, 0, 255, 0, 0,
    0, 0, 192, 0, 64, 0, 240, 0, 0, 0, 204, 1, 48, 255, 136, 1, 24, 255
};

这段字节被强制转换为LPWAVEFORMATEX传入acmStreamOpen函数,调用可以正常工作:

mmresult = acmStreamOpen(&hACMStream, hACMDriver, (LPWAVEFORMATEX)source_pcm_format, &pcm_format, 0, 0, 0, 0);

但我自行解析这段字节时遇到了问题:

  • 将其解析为WAVEFORMATEX时,wFormatTag值为2,对应ADPCMWAVEFORMAT格式
  • 尝试解析为ADPCMWAVEFORMAT时出现异常:该结构需要wNumCoefs数量的ADPCMCOEFSET,但现有50字节的长度不足以存储256个系数
  • 假设是MS-ADPCM格式并打印系数时,得到的系数列表与标准MS-ADPCM系数存在字节偏移

我的目标是将原始字节正确转换为ADPCMWAVEFORMAT或WAVEFORMATEX,同时疑惑为何原始代码的函数调用能正常工作。

补充信息:计算sizeof(WAVEFORMATEX) + sizeof(ADPCMCOEFSET * 7)的结果为52,比现有字节数组的长度多2个字节。我怀疑1999年至今相关结构有过变更,而且发现wSamplesPerBlock的值似乎等于预期为7的wNumCoefs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:31:07