我使用libdbus API发送方法调用并接收回复。对于一种这样的方法,我期待回复格式:
"a(sqns)"
DBus签名表示法中的含义:结构数组,其中每个结构的内容是字符串,uint16,int16和string。
使用DBusMessageIter
(迭代器),我可以遍历数组和结构。但是,为了简化我的解析代码,有没有办法在迭代之前得到这个数组的长度?
不幸的是,我不相信dbus_message_iter_get_fixed_array
适用于这种情况,因为我的数组包含的结构按此定义显示为non-fixed size。
我从API文档中看不出如何做到这一点(或者如果可能的话)。
答案 0 :(得分:0)
参加聚会可能有点晚,但为将来参考,我在使用dbus_message_iter_get_element_count()
方面取得了成功。您可以像这样使用它:
int count = dbus_message_iter_get_element_count(iter);
if(count > 0) {
DBusMessageIter arriter;
dbus_message_iter_recurse(iter, &arriter);
for(int i = 0; i < count; ++i) {
// read items from arriter
}
}
dbus_message_iter_next(iter);