gpt4 book ai didi

c - 如何创建映射到 GLib 中的数组的字典?

转载 作者:行者123 更新时间:2023-11-30 16:51:54 31 4
gpt4 key购买 nike

我试图返回一个指向字典的 G_Variant 指针,该字典将 uint16 作为键并将其映射到字节数组(即:“a{qay}”)。

这是我的尝试:

    #define KEY   0xDEAD
#define BYTE1 0xBE
#define BYTE2 0xEF
GVariantBuilder *arrBuilder, *builder;
GVariant *arr;

//build array of bytes ('ay')
arrBuilder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
g_variant_builder_add(arrBuilder, "y", BYTE1);
g_variant_builder_add(arrBuilder, "y", BYTE2);

arr = g_variant_new("v",g_variant_new("ay", arrBuilder));

//put it in a dict ('a{sv}')
builder = g_variant_builder_new(G_VARIANT_TYPE("a{qay}"));
g_variant_builder_add(builder, "{qay}", KEY, arr);
return g_variant_builder_end(builder);

它不起作用,当我尝试在 D-Bus 上查询此属性时,我收到以下错误消息:

(process:18319): GLib-CRITICAL **: g_variant_builder_end: assertion 'is_valid_builder (builder)' failed

(process:18319): GLib-CRITICAL **: g_variant_get_type: assertion 'value != NULL' failed

(process:18319): GLib-CRITICAL **: g_variant_type_is_array: assertion 'g_variant_type_check (type)' failed

(process:18319): GLib-CRITICAL **: g_variant_get_type_string: assertion 'value != NULL' failed

(process:18319): GLib-ERROR **: g_variant_new: expected array GVariantBuilder but the built value has type '(null)'
Trace/breakpoint trap (core dumped)

最佳答案

arr = g_variant_new("v",g_variant_new("ay", arrBuilder));

也许您应该结束数组构建器,以便它返回您的字节数组?

arr = g_variant_builder_end(arrBuilder);
<小时/>

编辑:我找到了答案:

下面的代码将实现你想要做的事情,诀窍是字节数组是一个变体(一切都是一个变体)!

GVariant *arr_builder, *dict_builder;

/* Build the array of bytes */
arr_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
g_variant_builder_add(arr_builder, "y",0xAA);
// Add some more if you want
GVariant *byte_array = g_variant_builder_end(arr_builder);
g_variant_builder_unref(arr_builder);

/* Build the dictionary, now is the trick */
dict_builder = g_variant_builder_new(G_VARIANT_TYPE("a{qv}"));
g_variant_builder_add(dict_builder, "{qv}", 0x0F0F, byte_array);
GVariant *dict = g_variant_builder_end(dict_builder);
g_variant_builder_unref(dict_builder);

/* Now you can print your variants (dict and byte_array) and print their type */
g_print(g_variant_print(dict,TRUE));
g_print(g_variant_get_type_string(dict));

在尝试你写的内容时,我遇到了与你相同的错误,这成功了 =)

关于c - 如何创建映射到 GLib 中的数组的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516615/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com