昨天,我开始了解如何使用TLV格式表示信息。
如果你要用ANSI编写一个便携的BER TLV编码器/解码器,你会使用什么数据结构(*)?
像下面这样的东西行吗?
struct TlvElement
{
int nTag;
int nLength;
unsigned char *pValue; // Byte array
TlvElement *pNext;
}; (*)不幸的是,我不能使用C++和STL来解决这个问题。
发布于 2012-08-11 17:44:29
如果我要用ANSI编写一个TLV编码器/解码器,我会选择一种经过验证的、标准化的、灵活的data serialization (即在线)格式:ASN.1 BER、Thrift、etc。
这是一个经典的领域,在这里车轮每天都会被重新发明。聪明的人已经想到了高效、可维护和灵活的解决方案;再次经历同样的过程几乎没有意义。
例如,如果示例中的结构用于serialization,,您仍然需要考虑:
int的大小取决于编译器平台和操作系统)有效负载中数据的一些现有的格式提供了语义和语法之间的分离;其他格式允许您为数据方案自动生成编码器/解码器。
一旦选择了serialization格式,就可以开始考虑内存中的格式,这在很大程度上取决于您的应用程序将如何处理数据,例如:
我建议看看asn1c为处理ASN.1 BER而生成的API,或者看看libtasn1的API。
https://stackoverflow.com/questions/11913299
复制相似问题