当前位置: 首页 > 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&…...

STC89C52抢答器DIY避坑指南:从万能板焊接调试到常见故障排查(蜂鸣器不响、按键失灵)

STC89C52抢答器DIY避坑指南&#xff1a;从万能板焊接调试到常见故障排查 在电子制作领域&#xff0c;抢答器是一个经典的单片机实践项目。不同于市面上现成的模块化套件&#xff0c;使用万能板手工焊接STC89C52抢答器不仅能深入理解电路原理&#xff0c;更能锻炼实际动手能力。…...

8款实用AI论文生成工具(包括爱毕业aibiye)及新手详细指南

在学术研究领域&#xff0c;AI技术的应用显著提升了论文写作的效率与质量。以下推荐8款功能强大的智能工具&#xff0c;涵盖文献解析、内容生成、文本优化等关键环节&#xff0c;助力研究者高效完成从资料收集到论文润色的全流程工作。这些创新解决方案能够有效简化研究过程&am…...

W25Q16 Flash存储器:从基础概念到SPI通信实战

1. 认识W25Q16 Flash存储器 第一次接触W25Q16是在做一个智能家居项目时&#xff0c;需要保存用户的WiFi配置和房间温湿度记录。当时试过用单片机内部的EEPROM&#xff0c;但容量太小不够用&#xff0c;后来发现了这款性价比超高的外部Flash芯片。简单来说&#xff0c;W25Q16就像…...

避坑指南:雅特力AT32F403A V2库在Keil5中的常见配置错误及解决方法

雅特力AT32F403A V2库在Keil5中的高频配置问题与实战修复方案 当国产MCU逐渐成为嵌入式开发的新选择&#xff0c;雅特力AT32F403A凭借其出色的性价比获得了不少工程师的青睐。但在实际开发中&#xff0c;特别是在Keil5环境下使用V2库时&#xff0c;不少开发者都会遇到一些看似简…...

瑞芯微RK3399固件急救指南:用upgrade_tool搞定系统崩溃后的快速还原

RK3399固件灾难恢复实战&#xff1a;从分区表重建到全系统还原 当一块搭载RK3399的开发板因固件损坏而变砖时&#xff0c;那种面对黑屏的无力感&#xff0c;相信每个嵌入式开发者都深有体会。去年我们产线就遭遇过因批量升级失败导致30台设备集体罢工的紧急状况&#xff0c;正…...

如何从微信聊天记录中提取数据价值:WeChatMsg的完整解决方案

如何从微信聊天记录中提取数据价值&#xff1a;WeChatMsg的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

实战应用:用快马平台将dc=y103pc=参数转化为电商筛选功能

今天想和大家分享一个在电商项目中特别实用的功能开发经验——如何把URL参数&#xff08;比如dcy103&pchigh这种格式&#xff09;转化成用户友好的商品筛选面板。这个需求在实际业务中特别常见&#xff0c;比如用户分享一个筛选好的商品列表链接&#xff0c;其他人打开时能…...

RWKV7-1.5B-g1a参数调优教程:temperature=0.1稳输出 vs 0.8活生成,效果差异实测

RWKV7-1.5B-g1a参数调优教程&#xff1a;temperature0.1稳输出 vs 0.8活生成&#xff0c;效果差异实测 1. 模型简介 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型&#xff0c;特别适合以下场景&#xff1a; 基础问答文案续写简短总结轻量中文对话 这个1.5B参数的版…...

Qwen3.5-4B-Claude模型Java微服务集成指南:SpringBoot实战案例

Qwen3.5-4B-Claude模型Java微服务集成指南&#xff1a;SpringBoot实战案例 1. 引言&#xff1a;当大模型遇上微服务 最近在开发企业知识管理系统时&#xff0c;我们遇到了一个典型需求&#xff1a;如何让传统Java微服务架构与前沿的大语言模型无缝集成。经过多次尝试&#xf…...

Qwen3智能字幕对齐系统与Dify工作流集成:打造自动化视频内容生产线

Qwen3智能字幕对齐系统与Dify工作流集成&#xff1a;打造自动化视频内容生产线 1. 引言 你有没有算过&#xff0c;一个视频剪辑师一天要花多少时间在字幕上&#xff1f;从听写、校对、再到调整时间轴&#xff0c;一个十分钟的视频&#xff0c;光是字幕可能就要耗掉一两个小时…...