从 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);