2012-07-13 52 views

回答

3

here教程給出了關於如何解析BER-TLV的提示。使用JACCAL

+0

這是一個幻想! – null 2015-08-19 14:22:53

1

我做了一個簡單的解析器基於這裏提供的信息:http://www.codeproject.com/Articles/669147/Simple-TLV-Parser

我不知道如果這個代碼支持所有的標準,但它爲我工作。

public static Map<String, String> parseTLV(String tlv) { 
    if (tlv == null || tlv.length()%2!=0) { 
     throw new RuntimeException("Invalid tlv, null or odd length"); 
    } 
    HashMap<String, String> hashMap = new HashMap<String, String>(); 
    for (int i=0; i<tlv.length();) { 
     try { 
      String key = tlv.substring(i, i=i+2); 

      if ((Integer.parseInt(key,16) & 0x1F) == 0x1F) { 
       // extra byte for TAG field 
       key += tlv.substring(i, i=i+2); 
      } 
      String len = tlv.substring(i, i=i+2); 
      int length = Integer.parseInt(len,16); 

      if (length > 127) { 
       // more than 1 byte for lenth 
       int bytesLength = length-128; 
       len = tlv.substring(i, i=i+(bytesLength*2)); 
       length = Integer.parseInt(len,16); 
      } 
      length*=2; 

      String value = tlv.substring(i, i=i+length); 
      //System.out.println(key+" = "+value); 
      hashMap.put(key, value); 
     } catch (NumberFormatException e) { 
      throw new RuntimeException("Error parsing number",e); 
     } catch (IndexOutOfBoundsException e) { 
      throw new RuntimeException("Error processing field",e); 
     } 
    } 

    return hashMap; 
} 
+0

simple-tlv與ber-tlv不同,簡單的tlv解析器經常會在ber-tvl數據上崩潰 – 2014-11-26 13:05:02

0

您可以使用此BER-TLV分析器:source code on gitdownload jar
例子:

如何分析

byte[] bytes = HexUtil.parseHex("50045649534157131000023100000033D44122011003400000481F"); 
BerTlvParser parser = new BerTlvParser(LOG); 
BerTlvs tlvs = parser.parse(bytes, 0, bytes.length); 

如何建立

byte[] bytes = new BerTlvBuilder() 
       .addHex(new BerTag(0x50), "56495341") 
       .addHex(new BerTag(0x57), "1000023100000033D44122011003400000481F") 
       .buildArray(); 
0

可能是this free library能對您有用。我用這個來進行簡單的TLV解析。無論如何,這是與麻省理工學院的許可證,你可以修改它。

https://github.com/VakhoQ/tlv-encoder 
相關問題