js-ctypes中结构与数组的memset

时间:2014-06-30 11:09:51

标签: javascript firefox-addon jsctypes

这与问题memset has no DLL so how ctype it结合Any ideas what fillchar is doing?

有关

我了解到memset可以与arraystructure类型一起使用。但是,没有sizeof功能,因此我们必须为arry .length.size()结构否?

我对memset如何处理结构和数组感到困惑。

1 个答案:

答案 0 :(得分:1)

嗯,我提供的ctypes memset可以用于数组。但是结构可以转换为数组。

通常你不会在结构上使用memset,除非你想要将它初始化为0。但话说回来,通常你不需要将它初始化为0,如果你自己用ctypes创建结构实例,因为ctypes会处理它(所以你只需要在外部代码分配时初始化它)无论什么原因)。

通常你只需要设置结构的成员:

var tbb = new struct_TBButton();

tbb.iBitmap = 1;
tbb.idCommand = 2;

在真正的不正常情况下,您需要memset它,然后将其转换为(字节)数组,然后您可以memset

// Cast to a byte array (uint8_t == byte)
var a = ctypes.cast(b, ctypes.uint8_t.array(struct_TBButton.size));

// memset to something.
// memset function from other question.
function memset(array, val, size) {
 for (var i = 0; i < size; ++i) {
   array[i] = val;
 }
} 
memset(a, 0x10, a.length);

// verify by checking iBitmap, which is an int(32), so 4 bytes,
// so should be 10101010.
console.log(tbb.iBitmap, tbb.iBitmap.toString(16), b.iBitmap == 0x10101010);
//  269488144 "10101010" true