Итак, ctypes memset
, которые я предоставил, можно использовать с массивами. Но структуры можно преобразовать в массивы.
Обычно вы не будете использовать memset
в структуре, за исключением случаев, когда вы хотите инициализировать ее нулем. Но опять же, обычно вам не нужно инициализировать его до 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
person
nmaier
schedule
30.06.2014