2016-11-24 104 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.