Mozilla ctypes,从c数组中提供Arraybuffer

时间:2013-12-03 01:49:40

标签: javascript casting ctypes mozilla arraybuffer

我有一个带有两个参数的JavaScript函数(buffer,len),其中buffer是一个长度为“len”的编码数据数组。我的函数返回两个值没有问题。但是,我无法弄清楚如何将实际数据读取到JavaScript字符串。 readString对我不起作用,因为数据不是UTF-8。

我想知道是否可以将数据(在我的情况下为“buffer”)提供给长度相同且字节大小相等的ArrayBuffer

1 个答案:

答案 0 :(得分:0)

你的函数返回两个值?你的意思是你的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

How to access the data in javascript from the ctype pointer of type uint8_t建议ct_ptr [1] .contents将访问第二个元素。我试过,我发现[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.