我有一个带有两个参数(缓冲区,len)的 JavaScript 函数,其中缓冲区是长度为“len”的编码数据数组。我的函数返回两个值没有问题。但是,我不知道如何将实际数据读取到 JavaScript 字符串。readString 对我不起作用,因为数据不是 UTF-8。
我想知道是否可以将数据(在我的情况下为“缓冲区”)提供给长度相同且字节大小相同的 ArrayBuffer
我有一个带有两个参数(缓冲区,len)的 JavaScript 函数,其中缓冲区是长度为“len”的编码数据数组。我的函数返回两个值没有问题。但是,我不知道如何将实际数据读取到 JavaScript 字符串。readString 对我不起作用,因为数据不是 UTF-8。
我想知道是否可以将数据(在我的情况下为“缓冲区”)提供给长度相同且字节大小相同的 ArrayBuffer
你的函数返回两个值?你的意思是你的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 将访问第二个元素。我试过了,我发现 [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.