2016-11-24 17 views
0

私はCを使用してtlv 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(バッファ)とそのobliagtionを理解する必要があります。誰も私plsを助ける?

+0

としてそれを与えたであろう10バイトのデータだったと仮定エンコード - デコード。しかし、これはBER TLVではない –

答えて

0

関数append_bertlv_dataの定義を投稿できる場合は、もっと説明できます。

ロジックは[TAG] [Length] [Value]の形式でデータをパックすることです。例を言って(コンテキストがEMVである)。あなたは タグ9F36た - アプリケーショントランザクションカウンタ 長さ - 2バイト 値 - 全データは5バイトで表され 9F36020001として0001 これは表されます。 (16進/パックドbcd)。 注意すべきことは、長さも16進数であることです。 http://codereview.stackexchange.com/questions/56203/type-length-value-tlv-:それは私達が多分これはあなたを助けることができる9F36 0A 123456789.

関連する問題