当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

DirectStruct

C 结构体工具
授权协议 LGPL
开发语言 C/C++
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 阎知
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

DirectStruct是一个强有力的代码自动生成工具,它可以自动生成C结构体与XML、JSON、二进制(带压缩)等报文之间的转换代码,还能自动生成ESQL代码片段,在应用中直接使用自动化代码以提高开发效率,避免开发冗余和手工编码风险。

DirectStruct生成了哪些自动化代码?

  • C结构体定义
  • 批量初始化缺省值函数
  • 网络/主机字节序化函数
  • 二进制序列化/反序列化函数(可带压缩)
  • XML序列化/反序列化函数(依赖开源库fasterxml)
  • JSON序列化/反序列化函数(依赖开源库fasterjson)
  • 嵌入式SQL代码
  • 打印结构体内所有字段值函数

用DirectStruct自动生成的代码能干什么?

  • 直接C结构体通讯交换 : 在特定平台之间直接把C结构体变量通过TCP扔给对方是一个很诱人的想法,阻碍我们的主要是整型字段的字节序问题,手工编码是一件冗余的事情,DirectStruct可以帮助你自动化这一过程。解决了字节序问题后就可以直接交换报文,避免了通讯发送前的打包和通讯接收后的解包,所以速度非常快,是某些追求极端性能的场景中的首选报文格式。
  • 结构体序列化/反序列化 : 使用DirectStruct自动生成的序列化/反序列化函数,可以将C结构体打包成二进制报文或XML报文或JSON报文等,以及反向解包,是的,打包解包函数自动生成,省却了你不少麻烦吧。二进制报文如果启用了压缩选项,压缩后的二进制数据块大幅缩小,更便于通讯高效交换。
  • 基于嵌入式SQL的数据库映射接口的代码自动化生成
  • 快速打印结构体内所有字段值 : 对于一个大结构,编写他的打印所有字段值的函数是一件很无聊的事情,你可以用DirectStruct帮助你自动生成日志函数,输出到屏幕,或你自己的日志流中。

为什么使用DirectStruct?

  • 灵活的报文定义语法 : 命令行工具dsc读入定义文件,生成自动化代码,支持子结构嵌套、子结构数组、定义文件包含等灵活配置方式。
  • 跨平台:DirectStruct支持WINDOWS、Linux、AIX等主流操作系统,尤其是多平台中不同的表达方法,如64位整型,相同的IDL定义文件将生成不同平台的标准。

性能压测

压测结论:

  • DirectStruct序列化(带压缩)后的报文大小66字节,而Google Protocol Buffer为72字节,DirectStruct在序列化和压缩报文大小上险胜。
  • DirectStruct反复序列化/反序列化(带压缩)1000万次总耗时1.080s,而Google Protocol Buffer总耗时4.248s,DirectStruct在序列化性能上完胜。
  • DirectStruct编译客户应用代码时不需要额外的头文件和库文件,只需要工具dsc生成的IDL_AllTypes2.dsc.c、IDL_AllTypes2.dsc.h即可,而Google Protocol Buffer不仅需要PressProtobuf.pb.cc、PressProtobuf.pb.h,还需要/usr/local/include/google/protobuf下的一大堆头文件以及/usr/local/lib/libprotobuf.a(9MB),还依赖于-lpthread,编译环境复杂。
 相关资料
  • 结构体是MATLAB的多维数组,其元素取决于原文的域指示符。例如, S.name = 'Ed Plum'; S.score = 83; S.grade = 'B+' 创建一个含三个域的标量结构体。 S = name: 'Ed Plum' score: 83 grade: 'B+' 和MATLAB的其他一切一样,结构体是数组,故可以插入附加元素。在此情况下,数组的每个

  • 4.4. 结构体 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号、员工的名字、家庭住址、出生日期、工作岗位、薪资、上级领导等等。所有的这些信息都需要绑定到一个实体中,可以作为一个整体单元被复制,作为函数的参数或返回值,或者是被存储到数组中,等等。 下面两个语句声明了一个叫Emplo

  • 这里列出了所有结构体,并附带简要说明:  Caddrinfo 地址信息  Cat_client AT Client 控制块  Cat_cmd AT 命令控制块  Cat_response AT Server 响应数据控制块  Cat_server AT Serve 控制块  Cfd_set 文件句柄管理  Chostent 主机地址和域名信息  Cin_addr IP地址  Crt_alarm 闹

  • 结构体是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 定义结构变量的一般格式为: struct 结构名 { 类型变量名; 类型变量名; ... } 结构变量; #include <stdio.h> // 定义一个名为的Student 的结构体,并且创建一个变量名student struct Student { int age; flo

  • 类似地,解构 struct 如下所示: fn main() { struct Foo { x: (u32, u32), y: u32 } // 解构结构体的成员 let foo = Foo { x: (1, 2), y: 3 }; let Foo { x: (a, b), y } = foo; println!("a = {}, b = {}, y = {

  • Swift 4提供了一个灵活的构建块,它使用构造作为结构体。 通过利用这些结构,可以定义构造方法和属性。 与C语言和Objective C不同 结构体不需要实现文件和接口。 结构体允许创建单个文件并将接口自动扩展到其他块。 在结构体中,通过返回旧值的副本来复制变量值并在后续代码中传递,以便不能更改这些值。 语法 定义结构体 例如,假设必须访问包含三个科目分数的学生记录,并计算出三个科目的总分数。

  • 主要内容:1、定义结构体,2、结构体的特征,3、类与结构体在 C# 中,结构体也被称为结构类型(“structure type”或“struct type”),它是一种可封装数据和相关功能的值类型,在语法上结构体与类(class)非常相似,它们都可以用来封装数据,并且都可以包含成员属性和成员方法。 1、定义结构体 要定义一个结构体需要使用 struct 关键字,每个结构体都可以被看作是一种新的数据类型,其中可以包含多个成员(成员属性和成员方法),例如下面

  • 在之前的某章中,我们学习了图(Map): iex> map = %{a: 1, b: 2} %{a: 1, b: 2} iex> map[:a] 1 iex> %{map | a: 3} %{a: 3, b: 2} 结构体是基于图的一个扩展。它引入了默认值、编译期验证。 定义一个结构体,只需调用defstruct/1: iex> defmodule User do ...> defstruct