javascript - 是什么导致 Uint8Array 中字符串的索引偏移?
问题描述
我正在尝试使用 File API 分析波形文件。
我需要在文件头中找到字符串的索引,以便获取后续数据。
我曾尝试在循环中转换字符串并匹配原始字节for
,但在分析 10k+ 文件时,这被证明是一个很大的性能杀手。
我现在正在尝试使用TextDecoder()
and找到它indexOf
。
// buffer is a (part of) a wave file as ArrayBuffer
const array = new Uint8Array(buffer);
const string = new TextDecoder().decode(array);
const index = string.indexOf('fmt');
这会给我一个索引。但是,当进行一点检查并确认我有正确的块时......
const check = array.slice(index, index + 4);
我得到了块标识符(字符串,在本例中为“FMT”)的不同结果。例如:
console.log(check);
// [102, 109, 116, 32]
或者:
console.log(check);
// [0, 102, 109, 116]
我得到的索引有时会被 -2、-1 或 0 偏移。这有点不可靠。
我想我的问题是:是什么导致了这种奇怪的偏移?
请不要让我参考第三方库来分析 .wav 文件,我很乐意让它工作/理解为什么它永远不会工作。
解决方案
推荐阅读
- django-models - 如何在自我表示中显示 Django 模型字段的前 x 个字符
- python - 使用 Vscode 调试 Python 给出指向 @@ 符号的语法错误
- javascript - 在 Postman 中解析 JSON 响应数组中的值
- python - 如何用正则表达式替换字符串列表中的字符串?
- vba - VBA 公共变量不起作用 - MS Word - 计算表中的字符
- python - 循环中的绘图挂起matplotlib:奇怪的内存泄漏?
- php - Docker+php-fpm+Xdebug (Linux) + PhpStorm (Windows)
- ruby-on-rails - Rails 和 AWS Lambda
- reactjs - 从 js 转换为 ts 时出现打字稿错误
- php - 安装 php7.2-dev 扩展的过程是什么?