\x12 \xe3数据是什么
\x12 \xe3是16进制数据。是ASCII对应字符的数字转化为16进制所得。
平时遇到的问题总是奇奇怪怪,所以不要问我为什么要转化为字符串/十进制数字/ascii
遇到的问题就是
在测试案例中对比数据时,前人留下的是16进制和字母混合结果,于是在新的需求做了相应改动后测试案例也应该做相应的匹配。
所以,要转化为可视化数据的话需要做以下操作:
- 16进制数据转化为十进制数据
- 十进制数据再转化成对应的ascii码对应的字符
如果你到手的数据,全部是\x12这种16进制数据的话,可以使用python直接print获取到转码的结果
print "\x12\xe3\x01\x0a\x06\x73\x79\x73\x74\x65\x6d\x10\x01\x1a\xd6\x01\x0a\x14\x0a\x05\x61\x64\x6d\x69\x6e\x12\x0b\x0a\x05\x61\x64\x6d\x69\x6e\x10\x04\x18\x01\x0a\x1a\x0a\x08\x61\x75\x64\x61\x64\x6d\x69\x6e\x12\x0e\x0a\x08\x61\x75\x64\x61\x64\x6d\x69\x6e\x10\x04\x18"
但是,如果你获取到的全是 10进制的数字怎么办:
于是,方案:
- 转化成16进制数据
- 对照ascii码获取到对应字符
但是字符可能有超出ascii范围的。就会显示不出对应字符,这里我没有这个需求,所以暂时不考虑,如果有需要的可以去查一下字符范围,然后选择对应的码进行解码。
所以我获取到的十进制数据转化成字符就应该是:
def to16(i):
k=i/16
v=i%16
kvs={
0:"0",
1:"1",
2:"2",
3:"3",
4:"4",
5:"5",
6:"6",
7:"7",
8:"8",
9:"9",
10:"a",
11:"b",
12:"c",
13:"d",
14:"e",
15:"f",
}
ss="\\x{}{}".format(kvs[k],kvs[v])
return ss
asciii="18 61 10 6 115 121 115 116 101 109 16 1 26 49 10 20 10 5 97 100 109 105 110 18 11 10 5 97 100 109 105 110 16 4 24 1 10 19 10 4 114 111 111 116 18 11 10 5 97 100 109 105 110 16 4 24 1 18 4 110 111 100 101"
t161=[]
for i in asciii.split(" "):
t161.append(to16(int(i)))
print "".join(t161)
没有直接将结果转化成ascii的对应字符。所以我直接复制到python脚本中print出来了,应该是有方法可以集成的。
得到了需要的结果。
但是我要对比的数据是字符串和16进制混合的,就很emmm…于是乎
方案:
- 限制转化成10进制的数据,如果是在字符串(我只用了小写字符)的范围内的就直接存字符
for i in asciii.split(" "):
if int(i) > 97 and int(i) < 122:
t161.append(chr(int(i)))
continue
t161.append(to16(int(i)))
即可获得混合16进制和字符的数据。然后执行test,终于解决了问题
文章参考:
https://blog.csdn.net/l460133921/article/details/74892476
https://bbs.csdn.net/topics/70006817
https://www.nhooo.com/python/python-examples-ascii-character.html
https://zhidao.baidu.com/question/358597454.html