求教各位大神 十六进制码转换为字符串的有关问题,谢谢
求教各位大神 十六进制码转换为字符串的问题,多谢
现有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;
那么,
现有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