当前位置: 首页 > news >正文

C语言序列化和反序列化--TPL(一)

TPL

TPL说明网站

C语言中高效的序列化

您可以使用tpl快速轻松地存储和重新加载C数据。Tpl是一个用于序列化C数据的库。数据以自然二进制形式存储。该API很小,并试图保持“不碍事”。Tpl可以序列化许多C数据类型,包括结构。Tpl与文件、内存缓冲区和文件描述符一起工作,因此它适合用作文件格式、IPC消息格式或任何需要存储和检索数据的场景

表达你的数据

只需将正在处理的数据类型表示为tpl格式字符串。例如,如果您有一个数字id列表和相应的用户名,那么您的格式字符串是a (is)。将C变量映射到格式字符串,然后打包或解包数据。格式字符串让您专注于您的数据,而不是存储格式。
在这里插入图片描述

tpl的用途

Tpl提供了一种方便的文件格式。例如,假设一个程序需要存储一个用户名和id列表。这可以使用格式字符串A(si)来表示。如果程序需要两个这样的列表(例如,一个用于普通用户,一个用于管理员),则可以表示为A(si)A(si)。使用tpl很容易读写这类结构化数据。

Tpl也可以用作IPC消息格式。它可以处理字节顺序问题,并自动从流中拆分单个消息。

表达类型

tpl的“数据类型”被显式地声明为格式字符串。存储在tpl中的数据类型没有任何歧义。一些例子:
A(is)是由整串对组成的可变长度数组
A(is)A(is)是两个这样的数组,彼此完全独立
S(ci)是一个包含字符和整数的结构体
S(ci)#是后一种结构的定长数组
A(A(i))是一个嵌套数组,即由整数数组组成的数组

tpl映像

tpl映像是tpl的序列化形式,存储在内存缓冲区或文件中,或写入文件描述符。
tpl图像里有什么?
不需要了解tpl图像的内部结构。但对于好奇的人来说,图像是一个严格定义的二进制缓冲区,有两个部分,一个头和数据。头部编码图像的长度、格式字符串、端序和其他标志。数据部分包含打包的数据。

不需要框架

tpl映像的一个特性是可以将连续图像写入流,而不需要在它们之间使用任何分隔符。使用tpl_gather(或TPL_FD模式下的tpl_load)的读取器一次只能获得一个tpl映像。因此,tpl图像可以用作IPC消息格式,而不需要任何更高级别的帧协议。

数据可移植性

当正确使用tpl时,在一种CPU上生成的tpl映像通常可以移植到其他CPU类型。考虑到tpl是一种二进制格式,这可能会让人感到惊讶。但tpl经过精心设计,使其能够发挥作用。每个格式字符都有一个相关的显式大小的类型。对于整数和浮点类型,其“端序”或字节顺序约定因CPU而异,tpl在解包过程中自动且透明地纠正端序(如果需要)。浮点数有其特殊的困难。不保证浮点可移植性。也就是说,由于许多现代CPU使用IEEE 754浮点表示,因此数据可能在它们之间是可移植的。

XML and Perl

Note: The tplxml utility and the Perl module are currently unsupported in tpl 1.5.

XML

虽然tpl映像是一个二进制实体,但是您可以使用lang/perl目录中包含的tplxml实用程序查看XML格式的任何tpl映像。
tplxml文件。TPL > file.xml
TPLXML file.xml > file.tpl
该实用程序是双向的,如下所示。文件扩展名并不重要;tplxml检查它的输入,看它是tpl还是XML。您还可以将数据输送到它中,而不是给它一个文件名。tplxml实用程序很慢。它的目的有两个:调试(手工检查tpl中的数据),以及与基于xml的程序的互操作性。生成的XML通常是原始二进制tpl图像的十倍大。

Perl

在lang/ Perl /Tpl.pm中有一个Perl模块。Perl API对于编写与C程序互操作的Perl脚本非常方便,并且需要来回传递结构化数据。它是用纯Perl编写的。

构建和安装

Tpl不依赖于系统C库以外的库。您可以简单地将tpl源代码复制到您的项目中,这样就没有依赖项了。或者,您可以将tpl构建为库并将其链接到您的程序。

作为源

使用tpl的最简单方法是将源文件tpl.h和tpl.c(来自src/目录)直接复制到项目中,并与其他源文件一起构建它们。不需要特殊的编译器标志。

作为库

或者,从顶级目录将tpl构建为库,运行:

./configure
make
make install
测试套件

您可以通过以下命令编译并运行内置测试套件:

cd tests/
make

相关文章:

C语言序列化和反序列化--TPL(一)

TPL TPL说明网站 C语言中高效的序列化 您可以使用tpl快速轻松地存储和重新加载C数据。Tpl是一个用于序列化C数据的库。数据以自然二进制形式存储。该API很小,并试图保持“不碍事”。Tpl可以序列化许多C数据类型,包括结构。Tpl与文件、内存缓冲区和文件…...

Session + JWT + Cookie

00:HTTP无状态(为了保持状态,前端好麻烦,又要自己存,又要想办法带出去,于是使用cookie) 01:Cookie 将用户信息,在每次请求时候 带给后端(但是自己存储大小有…...

PaddleOCR2.7+Qt5

章节一:Windows 下的 PIP 安装 官网安装教程地址 按照里面的教程去安装 如果使用cuda版本的还要安装tensorrt,不然后面运行demo程序的程序会报如下错。 下载TensorRT 8版本,tensorrt下载地址 章节二:编译源码 进入官网源码地址 下…...

在Android中解析XML文件并在RecyclerView中显示

1. 引言 最近工作有解析外部xml文件在App中显示的需求&#xff0c;特来写篇文章记录一下&#xff0c;方便下次使用。 2. 准备工作 首先&#xff0c;在项目的AndroidManifest.xml文件中添加读取外部存储的权限声明。 <uses-permission android:name"android.permiss…...

Notes for video: EDC-Con 2022/01 - EDC Conceptual Overview and Architecture

Eclipse Dataspace Connector 中文概念 Eclipse Dataspace Connector (EDC) 是一个开源项目&#xff0c;旨在提供一种标准化的方法来连接和共享数据空间中的数据。它是 Eclipse Foundation 下的一个项目&#xff0c;目标是促进数据共享和数据交换的互操作性。以下是 EDC 的一些…...

windows下nginx配置https证书

1、制作证书 1.1 安装工具openSSL。下载地址&#xff1a;http://slproweb.com/products/Win32OpenSSL.html Win64OpenSSL_Light-3_1_0.exe安装&#xff08;假定安装位置在 d:\openSSL\&#xff09; 1.2 配置openSSL环境。 新建系统变量OpenSSL值为d:\openSSL\bin&#xff0c;相…...

Llama改进之——RoPE旋转位置编码

引言 旋转位置编码(Rotary Position Embedding, RoPE)将绝对相对位置依赖纳入自注意力机制中&#xff0c;以增强Transformer架构的性能。目前很火的大模型LLaMA、QWen等都应用了旋转位置编码。 之前在[论文笔记]ROFORMER中对旋转位置编码的原始论文进行了解析&#xff0c;重点…...

Python的解析网页

课前案例 通过requests模块爬取指定网站中的图片并保存到本地目录中。 上述案例采用的是同步方式下载图片&#xff0c;效率太低。异步方式如下&#xff08;线程&#xff09;&#xff1a; # target为目标函数&#xff1b;args中传入的是download函数的参数url threading.Threa…...

VBA技术资料MF159:实现某个区域内的数据滚动

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统&#xff08;DMS&#xff1a;Document Management System&#xff09;是一种软件系统&#xff0c;用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档&#xff0c;如文本文档、电子表格、图像、音频或视频文件等…...

lambda函数实践

文章目录 1.简单实例2.lambda函数使用3.捕获列表的使用4.lambda表达式的应用1.简单实例 2.lambda函数使用 3.捕获列表的使用 4.lambda表达式的应用 #include <iostream> #include <vector>using namespace std;/** 1.简单实例* 2.lambda函数使用* 3.捕获列表的…...

[leetcode hot 150]第一百九十一题,位1的个数

题目&#xff1a; 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中设置位的个数&#xff08;也被称为汉明重量&#xff09;。 这道题比较简单&#xff0c;直接对最后一位进行与1的与操作&#xff0c;然…...

gitea的git库备份与恢复

文章目录 gitea库的备份与恢复概述笔记实验环境更新git for windows更新 TortoiseGit备份已经存在的gitea的git库目录使用gitea本身来备份所有git库目录将gitea库恢复到新目录m1m2m3启动gitea - 此时已经恢复完成FETCH_HEAD 中有硬写位置再查一下app.ini, 是否改漏了。m1m2 总结…...

【强化学习05】从Q学习到深度Q学习

深度Q学习&#xff08;Deep Q-Learning, DQN&#xff09;是将深度学习与Q学习结合起来的一种强化学习方法&#xff0c;利用神经网络来近似Q值函数&#xff0c;解决传统Q学习在大规模或连续状态空间中的局限性。下面详细解释DQN的机理。 背景知识 Q学习 Q学习是一种值函数法&…...

FPGA实现多路并行dds

目录 基本原理 verilog代码 仿真结果​ 基本原理 多路并行dds&#xff0c;传统DDS的局限性在于输出频率有限。根据奈奎斯特采样定理&#xff0c;单路DDS的输出频率应小于系统时钟频率的一半。但是在很多地方&#xff0c;要使采样率保持一致&#xff0c;所以&#xff0c;为了…...

ArcgisPro3.1.5安装手册

ArcgisPro3.1.5安装手册 一、目录介绍: 二、安装教程&#xff1a; (1)安装顺序&#xff1a;最先安装运行环境&#xff08;runtime6.0.5&#xff09;,接着安装install里面的文件&#xff0c;最后复制path里面的文件替换到软件bin文件夹下即可。 (2)具体安装步骤&#xff…...

三大主流框架

Web前端开发领域中&#xff0c;三大主流框架通常指的是&#xff1a; React&#xff1a;由Facebook开发的一个用于构建用户界面的JavaScript库。React以其组件化、声明式编程和虚拟DOM等特点而广受欢迎&#xff0c;能够高效地更新和渲染大型应用。 Vue.js&#xff1a;由尤雨溪创…...

【C++】:vector容器的底层模拟实现迭代器失效隐藏的浅拷贝

目录 &#x1f4a1;前言一&#xff0c;构造函数1 . 强制编译器生成默认构造2 . 拷贝构造3. 用迭代器区间初始化4. 用n个val值构造5. initializer_list 的构造 二&#xff0c;析构函数三&#xff0c;关于迭代器四&#xff0c;有关数据个数与容量五&#xff0c;交换函数swap六&am…...

必看项目|多维度揭示心力衰竭患者生存关键因素(生存分析、统计检验、随机森林)

1.项目背景 心力衰竭是一种严重的公共卫生问题,影响着全球数百万人的生活质量和寿命,心力衰竭的病因复杂多样,既有个体生理因素的影响,也受到环境和社会因素的制约,个体的生活方式、饮食结构和医疗状况在很大程度上决定了其心力衰竭的风险。在现代社会,随着生活水平的提…...

centos安装Redis

在CentOS上安装Redis的步骤如下&#xff1a; 使用yum安装依赖库&#xff1a; sudo yum install -y gcc make 下载Redis源码&#xff1a; wget http://download.redis.io/releases/redis-6.0.9.tar.gz 解压Redis源码&#xff1a; tar xzf redis-6.0.9.tar.gz 编译Redis&…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...