GLib中的数据类型及操作

SAP期初库存导入 (1) LSMW 阅读详情

转载:http://blog.youkuaiyun.com/yuanxingyang/article/details/45694161

一、DATA TYPE
  • Basic Data
[Name]  [Code in D-Bus]  [Data Type in glib]  [Data Type in libdbus-C++]
BYTE         ‘y’            guchar                  unsigned char           
BOOLEAN      ‘b’            gboolean                bool
INT16        ‘n’            gint16                  signed short
UINT16       ‘q’            guint16                 unsigned short
INT32        ‘i’            gint                    int
UINT32       ‘u’            guint                   unsigned int
INT64        ‘x’            gint64                  signed long long
UINT64       ‘t’            guint64                 unsigned long long
DOUBLE       ‘d’            gdouble                 double
STRING       ‘s’            const gchar *           std::string
OBJECT_PATH  ‘o’            const gchar *           DBus::Path :public std::string
UNIX_FD      ‘h’            GVariant *              int
SIGNATURE    ‘g’            const gchar *           DBus::Signature :public std::string
  • Complex Data
[Name]   [Code in D-Bus]   [Data Type in glib]  [Data Type in libdbus-C++]
STRUCT      ‘(‘ and ‘)’         Gvariant            DBus::Struct<>
ARRAY       ‘a’                 Gvariant            std::vector<>
VARIANT     ‘v’                 Gvariant            DBus::Variant
DICT_ENTRY  ‘{’ and ‘}’
(Only appear after ‘a’)     Gvariant    When it is used together with ‘a’,it is             
                                        represented by std::map<>
二、GLib数据操作举例

1、结构体序列化

GVariant    *pmark = NULL;
gdouble m1 = 80;
gdouble m2 = 70;
const gchar * sm1 = "chinese";
const gchar * sm2 = "english";
pmark = g_variant_new("((sd)(sd))",sm1,m1,sm2,m2);

2、结构体反序列化

GVariant *out_arg = NULL;
const gchar *           subChin = NULL;
gdouble                 markChin = 0;
const gchar *           subEng = NULL;
gdouble                 markEng = 0;
g_variant_get(out_arg, "((sd)(sd))",&subChin,&markChin,&subEng,&markEng);

3、数组的序列化

GVariantBuilder *builder = NULL;
GVariant *outarg = NULL;

builder = g_variant_builder_new(G_VARIANT_TYPE("a(sn)"));
g_variant_builder_add(builder, "(sn)","test",1);
g_variant_builder_add(builder, "(sn)","tmp",2);
outarg = g_variant_new("a(sn)", builder);
g_variant_builder_unref(builder);

4、数组的反序列化

GVariantIter *iter = NULL;
const gchar * str = NULL;
gint16 num = 0;
g_variant_get(argout, "a(sn)", &iter);
while (g_variant_iter_loop(iter, "(sn)", &str,&num))
{
    printf("return message : %s        %d\n", str,num);
}
g_variant_iter_free(iter);

5、键值对序列化

GVariantBuilder *builder = NULL;
GVariant *argin = NULL;

builder = g_variant_builder_new(G_VARIANT_TYPE("a{ss}"));
g_variant_builder_add(builder,"{ss}","lastdance.mp3","music/lastdance.mp3");
g_variant_builder_add(builder,"{ss}","Madonna.mp3","music/Madonna.mp3");
g_variant_builder_add(builder,"{ss}","DavidGarrett.mp3","music/David Garrett.mp3");
argin = g_variant_new("a{ss}", builder);
g_variant_builder_unref(builder);

6、键值对反序列化

g_variant_lookup(arg_inarg,"lastdance.mp3","s",&str);
printf("find keyvale:%s\n",str);
三、注意事项

1、GLib-CRITICAL **: g_variant_unref: assertion ‘value->ref_count > 0’

出现这种错误是由于调用g_variant_unref()的时机不正确,无论是从client通过同步接口或异步接口调用server接口时,在org_gtk_gdbus_example_animal_call_example_sync或org_gtk_gdbus_example_animal_call_example里面都会将GVariant的引用计数减1,有时调用以上两个函数后立即调用g_variant_unref()可能没有这个错误,估计是由于这两个函数里面把g_variant_unref()的处理过程放到其它线程处理,函数返回时,还没有进行g_variant_unref()的动作;所以紧接着执行g_variant_unref()不会出现问题;如果在这两个函数调用后sleep(20),在调用g_variant_unref(),肯定会报以上的错误;同样在server端调用org_gtk_gdbus_example_animal_complete_example返回值时,也会将返回值的GVariant的引用计数减1

2、有时会出现莫名其妙的Segmentation fault错误

如果使用printf进行输出log时,输出的格式化字符串没有\n,就会出现Segmentation fault错误

3、DICT_ENTRY类型最好只使用a{s*}和 a{o*}两种

因为当你使用g_variant_lookup进行查找时,你会发现g_variant_lookup只支持以上两种

4、GvariantIter类型的指针使用完,要使用g_variant_iter_free进行释放

5、GvariantBuilder类型的指针使用完,要使用g_variant_builder_unref进行释放

sdio wifi 移植 介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3 阅读详情

相关推荐

ANSYS ACT插件开发实战指南:从IronPython脚本到XML界面设计

本文提供了一份详尽的ANSYS ACT插件开发实战指南,重点讲解如何利用IronPython脚本实现仿真自动化,并通过XML设计用户友好的向导界面。内容涵盖从环境搭建、脚本编写(如自动创建材料)、界面控件绑定到调试打包的全流程,旨在帮助仿真工程师和团队负责人将重复性工作流程标准化,显著提升ANSYS软件的使用效率。

weixin_29310605的博客 453

【glib学习笔记】基本环境搭建

1. 简介 glib (注意不是glibc)是一个常用的c语言库,据我所知GNOME、GTK、Gstreamer、Qemu等都或多或少使用到了这个它。这个库里面包含了丰富的功能,比如常用数据结构与算法的实现、网络基础库、事件监听、线程相关、gobject(实现了类的概念)等等。 2. glib库编译方法[ref] 这里我们需要编译glib,glib的代码托管在GNOME的gitlab上面,并且至今...

iamfinehqhq的博客 2453

百度新闻评论内容抓取

通过抓包分析发现,百家号手机app端文章评论内容接口为:https://ext.baidu.com/api/comment/v1/comment/getlist?appid=101&sid=1008524_2-1010050_1-1007549_23033-1007550_23035&cuid=01B5EAF73E8A83BB842BE04E4FB6C656|23200201047...

codingforhaifeng的博客 2422

glib库 hash表实现分析

Hash Table的原理哈希表的目的简单来说是为了实现存储多个key=>value关系(注意,此处是单项推导,不支持反向查找),一个比较简单的模型实现是用一个数组来存储这些关系,但是在插入数据时,并不在index最小的数组位置插入,而是直接通过函数算出这个key-value应该存储的位置,这样可以避免查找时遍历查找。一个比较简单的实现方法是这样:typedef struct { T_Val

losemyheaven的专栏 2604

机载电脑与飞控串口通信(实测读取飞控IMU数据)《一、香橙派5max启动串口UART通信与飞控板通信,一次必通!》《二、allspark1与PIX6C通信踩坑及出坑》《三、orinnx载板与飞控通信》

机载电脑与飞控串口通信(实测读取飞控IMU数据)《一、香橙派5max启动串口UART通信与雷迅v5nano飞控板通信,一次必通!》《二、阿木机载电脑allspark1与PIX6C通信踩坑及出坑》,还有如何打开飞控串口以及如何提高飞控IMU频率。

2402_82745259的博客 3471

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文详细解析了OpenCV图像去畸变的原理与实战方法,对比了三种核心函数(标准、鱼眼、全景模型)的适用场景与效果。重点提供了完整的代码示例,并深入探讨了alpha、焦距、中心点等关键参数的调优技巧,以帮助开发者有效矫正镜头畸变,提升计算机视觉任务精度。

life6的博客 553

glib的GHashTable实践

glib的GHashTable实践

1355

Pixhawk+OpenMV实战:如何用Apriltag实现无人机自动降落(附避坑指南)

本文详细介绍了如何利用Pixhawk飞控和OpenMV摄像头,通过Apriltag视觉标签实现无人机的精准降落系统。从硬件搭建、参数配置到视觉处理代码优化,提供了完整的实战指南和避坑建议,帮助开发者快速实现厘米级精度的自动降落功能。

weixin_27076351的博客 482

ubuntu虚拟机下sudo apt update报错

这个错误通常意味着有另一个进程正在使用apt命令或dpkg命令,因此无法获得对dpkg锁的访问权限。如果没有其他进程正在运行,则需要清理锁定文件。确认是否有其他apt或dpkg进程正在运行。如果有其他进程正在运行,请等待它完成并退出。这将删除apt和dpkg使用的所有锁定文件。

AaronJJJ的博客 864

INCA_ProF脚本教程

一、首先INCA软件是当前主流标定开发软件之一,尤其在动力系统控制器的标定中应用非常广泛;与此同时ProF编程脚本是INCA软件提供各种实用功能之一,使用者可根据需求编写ProF脚本语言对ECU闪存编程等各种自定义操作。 二、然而ProF脚本语言在ETAS的官网或其他网络上并没有专门的使用教程,通常只有ETAS技术支持人员提供的ProF Documentation文档或少量可参考的Demo案例,然而ProF Documentation文档仅涉及ProF语言的函数的操作说明,没有从全局的框架上介绍Pro

weixin_29389627的博客 1万+

遗传病变异注释预测工具安装系列之------Exomiser 安装及bug处理

Exomiser是一个Java程序,它从全外显子组或全基因组测序数据中发现潜在的致病变异。 Java 版本必须为1.8以上。 Exomiser 最新版本下载 wget -c https://github.com/exomiser/Exomiser/releases/download/11.0.0/exomiser-cli-11.0.0-distribution.zip unzip ...

qq_37329349的博客 1537

BlueZ5

BlueZ5 Bluez介绍 BlueZ 是官方 Linux Bluetooth 栈,由主机控制接口(Host Control Interface ,HCI)层、Bluetooth 协议核心、逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)、SCO 音频层、其他 Bluetooth 服务、用户空间后台进程以及配置工具组成

Archer1991的博客 1万+

基于 ESP32 的智慧图书馆图书定位与借阅管理系统

本文设计的基于 ESP32 的智慧图书馆图书定位与借阅管理系统,以低成本、模块化、易部署为核心优势,融合 UWB 精准定位、RFID 自动识别、WiFi 无线通信技术,解决了传统图书馆的痛点问题。

weixin_42300449的博客 99

GLib库入门与实践_目录

目录 GLib库入门与实践_目录 前言 0_00_GLib库入门与实践_前言 第一部分 1_00_GLib库入门与实践_概述序 1_01_GLib库入门与实践_GLib库简介 1_02_GLib库入门与实践_GLib库源代码目录结构简介 1_03_GLib库入门与实践_GLib库帮助文档简介 1_04_GLib库入门与实践_GLib库的编译 1_05_GLib库入门与实践_第一个基于GLib库的程序 第二部分 2_00_GLib库入门与实践_基础序 2_01_GLib库入门与实践_GLib库版本与兼容性 2

field1003的博客 3494

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

1_01_GLib库入门与实践_GLib库简介

GLib库是用C语言实现的一个通用的、可移植的实用程序库,由GNOME的GTK小组开发并维护,最早用在GTK+程序开发上,后来被越来越多的程序所引用。刚开始,GLib库叫GLib-1.0,形成于约1995到1997年间,彼时提供的功能还比较少,后来于2002年升级到GLib-2.0,提供的功能也越来越丰富。截止目前,GLib的最新版本已经是GLib-2.56.4(当前最新:GLib-2.71.0,目前仍在更新)。

field1003的博客 4616

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

GLib 基础

这里给出 GLib 包括的基本内容快速浏览,了解详细内容请去官网查阅相关资料。 获取版本号 const gchar*glib_check_version() 基本数据类型 GLib 重新定义了基本数据类型,这样方便在不同平台上移植。其中我最欣赏的是对 char 的处理,我觉得 C++ 里面添加 w_char 处理 Unicode 字符问题,有些多此一局了。GLib 把 gchar 定义为 char,意味着要采用utf8 表达unicode 字符串。其实最近比较引人注目的 rust 编程语言也是...

程序猿视角 922

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

2_00_GLib库入门与实践_基础序

本部分是GLib的基础部分,包括八章内容。 2_01章介绍了GLib库的版本概念,不同版本的库可能会有兼容性问题。 2_02章介绍了GLib定义的基本数据类型,包括不属于标准C的新类型、保证在所有平台上大小相同的整数类型、比标准C语言更容易使用的类型、与标准C类型完全对应的类型及与标准C99类型完全对应的类型。 2_03章介绍了一些基础的标准宏。 2_04章介绍了整型与指针类型互相转换的一组宏。 2_05章介绍了字节序转换概念及字节序转换宏。 2_06章介绍了带溢出检查的整型加法和乘法运算函数,当溢出时会

field1003的博客 594

glib 小case

转载自:http://blog.youkuaiyun.com/feiyinzilgd/article/details/5868185 GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。它能够在类UNIX的操作系统平台(

云行雨施 品物流形 581

GLib库安装与简析

GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库, 它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏, 可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。 它能够在类UNIX的操作系统平台(如LINUX, HP-UNIX等),WINDOWS,OS2和BeOS等操作系统台上运行。 一、GLib

北雨南萍 6747

glib简介

GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。它能够在类UNIX的操作系统平台(如LINUX, HP-UNIX等),WINDOWS,OS2和BeOS等操作系统台上运行。 GLib需要一个支持线程

2749

Glib学习笔记(1)

GLib学习笔记一 Glib笔记1以前主要是做C++,最近有个机会转到嵌入式的C,大部分用的是Glib/Gobject系统,前一周的样子把相关内容大致浏览了一遍,主要以reference Menu为主。我看英文书的一个习惯是看一章,总结一章,这样学得快,记得牢。以前整理过很多书籍,不过都是本地的doc文档。在学Glib过程中,从网上学到很多知识,所以我也放到博客上吧。仅供自己总结,风格比较

Innost的专栏 1万+

浅析GLib

GLib需要一个支持线程的操作系统和一个字符集间转换函数iconv的支持,事实上大多现代的操作系统都有以上两项功能。 GLib由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个部分组成的。 GLib的最新版本是GLib2.2.1,可以到www.gtk.org网站下载其源代码。使用GLib2.0编写的应用程序,在编译时应该在编译命令中加入`pkg-config -cflags

jxgz_leo的博客 511

浅析Glib

以下转系 N年前的 一篇宋老师的文章。 原链接地址:http://www.ibm.com/developerworks/cn/linux/l-glib/index.html 现摘录如下,对本文作者表示感谢~~~~~ ------------------------------------------------------------------------------ 简介

flyeagle022的专栏 736

0_00_GLib库入门与实践_前言

GLib库是用C语言实现的一个通用的、可移植的实用程序库,由GNOME的GTK小组开发并维护,最早用在GTK+程序开发上,后来被越来越多的程序使用。刚开始,GLib库叫GLib-1.0,形成于约1995到1997年间,彼时提供的功能还比较少,后来于2002年升级到GLib-2.0,提供的功能也越来越丰富。

field1003的博客 2452

glib中gthread的应用---数据类型

数据类型 GLib中定义了十几种常用的数据结构类型和它们的相关操作函数,下面是关于字符串类型的简单示例: #include int main(int argc, char *argv[]) { GString *s; s = g_string_new("Hello"); g_print("%s\n", s->str); s = g_string_append(s,"

146

GLib基础

实用功能 GLib中包含了近二十种实用功能,从简单的字符处理到初学者很难理解的XML解析功能,这里介绍两种较简单的:随机数和计时。 下面代码演示如何产生1-100之间的随机整数和演示如何计算30000000次累加在计算时用的时间: 1 /* until.c 用来测试实用功能 */ 2 #include <glib.h> 3 int main(int argc,...

weixin_34018202的博客 102
上一篇: GDBus 通信机制介绍及Demo版本
下一篇: DLT(Diagnostic Log and Trace)嵌入式系统程序运行记录
yanlinembed
博客等级 码龄12年 42粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值