首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ANSI表示BER TLV数据结构?

用ANSI表示BER TLV数据结构?
EN

Stack Overflow用户
提问于 2012-08-11 16:46:42
回答 1查看 4K关注 0票数 4

昨天,我开始了解如何使用TLV格式表示信息。

如果你要用ANSI编写一个便携的BER TLV编码器/解码器,你会使用什么数据结构(*)?

像下面这样的东西行吗?

代码语言:javascript
复制
struct TlvElement
{
    int nTag;
    int nLength;
    unsigned char *pValue; // Byte array
    TlvElement *pNext;
}; 

(*)不幸的是,我不能使用C++和STL来解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2012-08-11 17:44:29

如果我要用ANSI编写一个TLV编码器/解码器,我会选择一种经过验证的、标准化的、灵活的data serialization (即在线)格式:ASN.1 BERThriftetc

这是一个经典的领域,在这里车轮每天都会被重新发明。聪明的人已经想到了高效、可维护和灵活的解决方案;再次经历同样的过程几乎没有意义。

例如,如果示例中的结构用于serialization,,您仍然需要考虑:

  • Endianess问题
  • 语言类型的大小( int的大小取决于编译器平台和操作系统)有效负载中数据的
  • 类型(您可能希望携带原始数据、字符串、数字、位字段、枚举、标记类型元素的
  • 分配和TLV结构(例如,TLV列表)

一些现有的格式提供了语义和语法之间的分离;其他格式允许您为数据方案自动生成编码器/解码器。

一旦选择了serialization格式,就可以开始考虑内存中的格式,这在很大程度上取决于您的应用程序将如何处理数据,例如:

  • 应用程序如何在解码后提取数据(例如,给定一个整数项,应用程序是访问已编码的表示形式还是容易使用的本机表示形式?)
  • 应用程序如何在解码前准备数据应用程序被复制( encoding
  • Whether )您想要最小化复制开销(例如,如果您有大量原始数据,您是否需要复制它来对其进行编码?
  • 如果原始数据是零碎的,是否需要在连续内存中的某个位置对其进行重新组合以进行编码?)
  • 是否可以对分配的内存所属的应用程序或库进行解码和解码?
  • 如何处理内存不足和未知标记等错误

我建议看看asn1c为处理ASN.1 BER而生成的API,或者看看libtasn1的API。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11913299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档