从 GVariant 中提取字节数组
Extract array of bytes from GVariant
我想使用 DBus 在进程之间传递一个字节数组,例如 [1,2,3,4,5]
。我明白,我可以使用 BYTE type 来声明一个字节数组(即 ay
),然后使用 GVariant
来存储和检索值吗?我怎样才能创建一个 GVariant
来保存这些数据,我怎样才能把它取回来?
可以使用 g_variant_new_from_data
创建 GVariant
。前两个参数是变体的类型 (ay
) 以及指向包含变体输入的字节数组的指针。
guint8 input[] = { 1, 2, 3, 4, 5 };
GVariant * variant;
variant = g_variant_new_from_data(G_VARIANT_TYPE ("ay"),
input,
G_N_ELEMENTS(input),
TRUE,
NULL,
NULL);
要取回数据,我们可以使用 g_variant_get_fixed_array
。
guint8 * array = NULL;
gsize n_elements;
array = g_variant_get_fixed_array (variant,
&n_elements,
sizeof(guint8));
g_assert (n_elements == 5);
g_assert (array != NULL);
我想使用 DBus 在进程之间传递一个字节数组,例如 [1,2,3,4,5]
。我明白,我可以使用 BYTE type 来声明一个字节数组(即 ay
),然后使用 GVariant
来存储和检索值吗?我怎样才能创建一个 GVariant
来保存这些数据,我怎样才能把它取回来?
可以使用 g_variant_new_from_data
创建 GVariant
。前两个参数是变体的类型 (ay
) 以及指向包含变体输入的字节数组的指针。
guint8 input[] = { 1, 2, 3, 4, 5 };
GVariant * variant;
variant = g_variant_new_from_data(G_VARIANT_TYPE ("ay"),
input,
G_N_ELEMENTS(input),
TRUE,
NULL,
NULL);
要取回数据,我们可以使用 g_variant_get_fixed_array
。
guint8 * array = NULL;
gsize n_elements;
array = g_variant_get_fixed_array (variant,
&n_elements,
sizeof(guint8));
g_assert (n_elements == 5);
g_assert (array != NULL);