2016-11-24 121 views
0

我想使用C编码/解码tg的msg数据。其实我是关于TLV格式化的新手。我刚刚发现了Google的一些代码,我不理解它们。如何使用C创建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(buffer)及其obliagtion。任何人都可以帮我吗?

+0

也许这可以帮助你:http://codereview.stackexchange.com/questions/56203/type-length-value-tlv-编码 - 解码。但这不是BER TLV –

回答

0

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

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