如何使用C创建TLV编码/解码msg数据?

时间:2016-11-24 06:12:00

标签: c tlv

我正在尝试使用C编码/解码tlv msg数据。实际上我是关于TLV格式化的新手。我刚发现谷歌的代码很少,我不明白。

unsigned char *tlv_buffer = NULL;
int size = 1;
int len = 0;
int result;

tlv_buffer = BKS_MALLOC(size);
result = append_bertlv_data(&tlv_buffer, &size, &len, 0xDF04, 2, "\x34\x56");
result = append_bertlv_data(&tlv_buffer, &size, &len, 0xDF81, 3, "ref");

append_bertlv_data:

int append_bertlv_data ( unsigned char ** buf_data, unsigned int buf_size,unsigned int * buf_len, unsigned int tag, unsigned int len, constunsigned char * value )

buf_data

作为输入,指向要附加BER-TLV数据元素的现有缓冲区的指针。作为输出,指向可能重新分配的缓冲区的指针。

buf_size

已分配内存的大小。

buf_len

缓冲区中写入的数据长度。

我只需要了解buf_data(缓冲区)及其删除。有人帮我吗?

1 个答案:

答案 0 :(得分:0)

如果您可以发布函数append_bertlv_data的定义,可以解释更多。

逻辑是以[TAG] [Length] [Value]格式打包数据。举个例子(上下文是emv)。你有 标签9F36 - 应用程序事务计数器 长度 - 2个字节 值 - 0001。 这将表示为 9F36020001 整个数据以5个字节表示。 (hex / packed bcd)。 需要注意的一点是长度也是十六进制。假设它是一个10字节的数据,我们将其作为9F36 0A 12345678901234567890。