这与问题memset has no DLL so how ctype it结合Any ideas what fillchar is doing?
有关我了解到memset
可以与array
和structure
类型一起使用。但是,没有sizeof
功能,因此我们必须为arry .length
和.size()
结构否?
我对memset如何处理结构和数组感到困惑。
答案 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