5

MP3 フレームを解析したい nodejs スクリプトがあります。これらのフレームは、各フレームが 2 バイトで始まるため、簡単に検出できます0xff 0xfb

Uint8Arrayそのファイルのバイトにアクセスするためにa を使用しています。I を使用[].indexOf.call(data, 0xff)すると、1 バイトは簡単に検索できますが、2 バイトは検索できません。明らかに、2 番目のバイトを手動で確認できますが、特定のバイト シーケンスのインデックスを取得するクリーンな方法があるかどうか疑問に思います。

4

1 に答える 1

7

どうやらカスタムコードを書かずにこれを行う良い方法はないので、それが私がしたことです:

Uint8Array.prototype.indexOfMulti = function(searchElements, fromIndex) {
    fromIndex = fromIndex || 0;

    var index = Array.prototype.indexOf.call(this, searchElements[0], fromIndex);
    if(searchElements.length === 1 || index === -1) {
        // Not found or no other elements to check
        return index;
    }

    for(var i = index, j = 0; j < searchElements.length && i < this.length; i++, j++) {
        if(this[i] !== searchElements[j]) {
            return this.indexOfMulti(searchElements, index + 1);
        }
    }

    return(i === index + searchElements.length) ? index : -1;
};
于 2013-01-04T18:59:35.280 に答える