2012-01-19 1 views
1

Node.jsのバイナリデータのバッファをバイナリデリミタで分割するにはどうすればよいですか?たとえば、\ xb8で区切られた各フィールドを持つバイナリコードでソケットデータが送信されます。どうすれば配列に分割できますか?バイナリデータをnode.jsの配列またはクラスに分割した

さらに、クラスやそれを読み込むことができる方法はありますか?たとえば、各パケットは、\ xb8で区切られたコマンド - 引数のペアを送信します。とにかく、バイナリデータで変数を取って、コマンドのインスタンスに分割することはできますか?

+0

\ xb8を探してバッファを単純に反復することに問題がありますか? – loganfsmyth

+0

NodeJSでバイナリを行う方法がわかりません。 – LordZardeck

+0

本当に十分です。覚えておいて、ヘックスは魔法ではありません。同じように、すべてを簡単にループし、0xD8の代わりに216と比較することができます。 – loganfsmyth

答えて

5

Buffers documentationをお読みください。

バッファ内の各文字を繰り返し、指定した文字に遭遇するたびに新しいバッファを作成します。

function splitBuffer(buf, delimiter) { 
    var arr = [], p = 0; 

    for (var i = 0, l = buf.length; i < l; i++) { 
    if (buf[i] !== delimiter) continue; 
    if (i === 0) { 
     p = 1; 
     continue; // skip if it's at the start of buffer 
    } 
    arr.push(buf.slice(p, i)); 
    p = i + 1; 
    } 

    // add final part 
    if (p < l) { 
    arr.push(buf.slice(p, l)); 
    } 

    return arr; 
} 
+0

あなたは変数のように実際に\ x(ここで16進数値)を使うことができますか? – LordZardeck

+0

ああ、構文は0x(ここでは16進数)です。 – fent

+0

である。 4バイトが必要な場合はどうすればいいですか?私はちょうど0xb8bbを使うことができますか? – LordZardeck

関連する問題