2013-12-03 2 views
1

У меня есть функция JavaScript с двумя аргументами (buffer, len), где buffer - массив закодированных данных длины len. Моя функция возвращает два значения без проблем. Однако я не мог понять, как читать фактические данные в строке JavaScript. readString не работает для меня, поскольку данные не являются UTF-8.Mozilla ctypes, подающий Arraybuffer из массива c

мне было интересно, если это возможно кормить данные («буфер» в моем случае) к ArrayBuffer той же длины и равного байта размера

ответ

0

Ваша функция возвращает два значения? Вы имеете в виду, что ваша функция c возвращает указатель на данные и int как длину?

предположим, что ваша с функция объявлена ​​как

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 

How to access the data in javascript from the ctype pointer of type uint8_t предлагает 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. 
Смежные вопросы