1

2 つの引数 (buffer、len) を持つ JavaScript 関数があります。ここで、buffer は長さ「len」のエンコードされたデータの配列です。私の関数は問題なく 2 つの値を返します。しかし、実際のデータを JavaScript 文字列に読み込む方法がわかりませんでした。データがUTF-8ではないため、readStringは機能しません。

同じ長さと同じバイトサイズの ArrayBuffer にデータ(私の場合は「バッファ」)をフィードできるかどうか疑問に思っていました

4

1 に答える 1

0

あなたの関数は 2 つの値を返しますか? c関数がデータへのポインタとintを長さとして返すということですか?

あなたのc関数が次のように宣言されているとします

xxxx.declare('function_name',
             ctypes.default_abi, 
             ctypes.int, //the return value, suppose as length
             ctypes.uint8_t.ptr.ptr);

  var ct_ptr=new ctypes.uint8_t.ptr();
  var ct_len=function_name(ct_ptr.address());

  ct_ptr.contents is the 1st element of the array

タイプ uint8_t の ctype ポインターから JavaScript のデータにアクセスする方法は、 ct_ptr[1].contents が 2 番目の要素にアクセスすることを示唆しています。試してみたところ、[1] は受け入れられないことがわかりました。次にキャストしてみました

 var ct_array=ctypes.cast(ct_ptr, ctypes.uint8_t.array(4));
 //then ct_array[0 ...  3] is accessible.

配列サイズが 4 以下の場合は成功しました。ただし、ポイントの値をバイト配列に変換します。正しい方法は次のとおりです。

 var ct_arrayptr=ctypes.cast(ct_ptr, ctypes.uint8_t.array(ct_len.value).ptr);
 var ct_array=ct_arrayptr.contents;
 //now ct_array[0 ...  ct_len.value-1] is accessible.
于 2014-08-14T00:42:25.663 に答える