【问题标题】:How to create TLV encode/decode msg data using C?如何使用 C 创建 TLV 编码/解码 msg 数据?
【发布时间】:2016-11-24 06:12:00
【问题描述】:

我正在尝试使用 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(缓冲区)及其义务。有人帮帮我吗?

【问题讨论】:

标签: c tlv


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2010-12-22
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多