有时候我们可能会需要做十六进制数与ascii码的转换,但是上网搜索转换器需要耗费一定时间,有时候还不一定能满足自己的需要
例如,如何将'6a 6b 6c 6d'转换为相应的ascii码字符?
可能我们可以去查ascii码表,但是一来,查找耗时间,第二呢,如果我们需要同时查找多个十六进制的对应的ascii码值,总不能一个个查吧。
所以,我们可以自己写一个简单的代码,实现多十六进制数与ascii的转换。
def main():
try: #为确保健壮性,需要对异常进行处理
def hexToAscii(hN):
n=map(lambda x:chr(int(x,16)),hN.split(' '))
for i in n:
print(i,end="") #对映射进行遍历
n = input('输入十六进制数,以空格为分隔符:')
hexToAscii(n)
print()
except: #不正常的输入的情况下,会提示你重新输入,并再次执行主函数
print("请输入正确的数!")
main()
main()
lambda函数是匿名函数,可以对输入的值进行处理
split()将输入的字符串进行分割,以’ '为分隔符,将字符串分割为数组
map函数有两个参数,可以对指定的序列做出映射,简单来说,就是可以对序列进行处理,然后返回一个map对象
int(x,16)将十六进制数转换为十进制数
chr()实现的功能就是将十进制数转换为ascii码
合起来就是map(lambda x:chr(int(x,16),hN.split(’ '))
例如,通过以下代码,返回序列中每一个值与2的乘积
十六进制转换为十进制
字符串分割
最后实现这样的效果
def main():
try:
def AsciiToHex(string):
s = map(lambda x:hex(ord(x)).strip('0x'),string)
for t in s:
print(t,end=" ")
string = input('输入字符串:')
AsciiToHex(string)
print()
except:
print("请输入正确的数!")
main()
main()
map()也可以对字符串做出映射
hex(ord(x))将ord(x)得到的int类型的十进制数转换为十六进制
string.strip(‘0x’)对得到的字符串进行处理,去除’0x’
最后的效果:
@echo off
chcp 65001
title ASCII码转换
color f2
:menu
echo ++++选项++++
echo 1 ascii to hex
echo 2 hex to ascii
echo 3 exit
set /p number=输入序号:
if %number%==1 goto ascii_hex
if %number%==2 goto hex_ascii
if %number%==3 exit
echo 请输入序号:(1-3):
pause
goto menu
:ascii_hex
python asciiToHex.py
pause
goto :menu
:hex_ascii
python hexToAscii.py
pause
goto menu
由于使用的是相对路径,所以需要把它们放在同一个文件夹下,同时还要确保python可以在cmd里运行(配置python环境变量)。
最后的效果