一.分类
两大类,数字和字符。
数字有10进制和16进制两种表现形式,字符以ascii码的形式存储,两者最终都会归于一串2进制数,也可以说一串16进制数。一串二进制数存储在那里,不同的读取方式会有不同的效果
二.两类函数(四个函数)
1.10进制ascii码与字符相互转换
ord()
参数:单个字符
返回值:字符对应的ascii码
f='z'
flag0=ord(f)
print(flag0)
>>>122
#验证ord()的参数是单个字符
f='zy'
flag0=ord(f)
print(flag0)
>>>TypeError: ord() expected a character, but string of length 2 found
chr()
参数:单个十进制ascii码,若不是ascii码,或者不是10进制ascii码都会报错
返回值:ascii码对应的十进制字符
f=122
flag1=chr(f)
print(flag1)
2.10进制ascii码与字符相互转换
hex()
参数:一个10进制数或一个16进制数
10进制数
返回值:一个以0x开头的16进制形式的字符串
f=16
flag=hex(f)
print(flag)
>>>'0x10'
16进制数
返回值:以0x开头的16进制字符串,样式不变,但变成字符串
f=0x7e
flag=hex(f)
print(flag)
>>>'0x7e'
作用:10进制转16进制
P.S.不要前面0x的写法
flag0=hex(destr)[2:]
bytes.fromhex()
参数:一个不以0x开头的16进制字符串
可显ascii码
返回值:ascii码对应的字符
f='7a'
flag0=bytes.fromhex(f)
print(flag0)
>>> b'z'
不在ascii码范围和非可显ascii码
返回值:原样式返回字符串
#超出范围
f='8e'
flag0=bytes.fromhex(f)
print(flag0)
>>>b'\x8e'
#非可显字符
f='1f'
flag0=bytes.fromhex(f)
print(flag0)
>>>b'\x1f'
作用:16进制数根据ascii码转换成byte类型字符(2个16进制组一个字符)
3.byte类型转换成str类型
flag = str(flag1, 'utf-8')