求教各位大神 十六进制码转换为字符串的有关问题,谢谢

求教各位大神 十六进制码转换为字符串的问题,多谢
现有16进制码流如下,输入:
31333530303030303030300000000000000000000001333200003235300002
预期得到如下结果,输出:
1350000000013725002

其中个字段拆分如下:
13500000000
1
37
250
02


对应字段属性如下:

字段名 字节数 属性
Num 21 C-Octet String
type 1 Unsigned Integer
codeA 4 C-Octet String
codeB 4 C-Octet String
times 2 Octet String


基本数据类型:
  Integer  无符号整数
   
  C-OctetString  变长字符串,以空字符表示字符串结束

  OctetString  定长字符串,位数不足时,右补空


诚心求教各位大神,望各位大神不吝赐教啊,多谢

------解决方案--------------------
主要看不懂有:
1) 37 是怎么来的?
2) 最后的 CodeB 和 times , CodeB 占4个字节,应该是 2500 才对,那么最后的 times ,就只剩下 2 这一个字节,何来2个字节?

其实这个应该不难,先全部转化为十六进制,再按长度解释就是了.

假如转化之后的十六进制数组是 char *a;
那么, 
C/C++ code

char *num = a;//得到字符串 "135"  Num     21     C-Octet String  : 
unsingned int mType = (unsigned int)a[21];//因为 Num 占了前面21个位置 , type 1 Unsigned Integer  
char *codeA= a+22;// 前面已经用了 21+1 个字节 , 4 C-Octet String
char *codeB= a+26;// 前面已经用了 21+1+4个字节 4 C-Octet String
char *times= a+30;// 前面已经用了 21+1+4+4个字节. 2 Octet String
// 注意,你必须优先校验 输入字符串 的准确性(至少长度要正确),
//     否则,就会出现我上面提到的第二点:times明明是2个字节,而且是字符串(意味着最后一个是0),但输入的字符串却只剩下1个字节,这么以来, times 这个变量就没有结束字符,一旦调用,就会出错.

------解决方案--------------------
313335303030303030303000000000000000000000 21个字节ASCII码13500000000
01 1
33320000 这个37是怎么来的?
32353000 250
02 02