0

Cを使用してtlv msgデータをエンコード/デコードしようとしています。実際には、TLVフォーマットについて初心者です。Google からいくつかのコードを見つけましたが、理解できません。

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 (バッファ) とその義務を理解する必要があるだけです。誰でも私を助けてくれますか?

4

1 に答える 1

1

関数 append_bertlv_data の定義を投稿できれば、詳細を説明できます。

ロジックは、[TAG][Length][Value] の形式でデータをパックすることです。例を挙げると (コンテキストは emv です)。タグ 9F36 - アプリケーション トランザクション カウンターの長さ - 2 バイト 値 - 0001 があります。これは 9F36020001 として表されます。データ全体は 5 バイトで表されます。(hex/packed bcd)。注意すべきことの 1 つは、長さも 16 進数であることです。9F36 0A 12345678901234567890 として指定した 10 バイトのデータであるとします。

于 2016-11-27T05:58:35.037 に答える