python中的字符数字之间的转换函数
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效
Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
chr(65)='A'
ord('A')=65
int('2')=2;
str(2)='2'
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int('0x10', 16) ==> 16 类似的还有oct(), bin() 字符串转整数: 10进制字符串: int('10') ==> 10 16进制字符串: int('10', 16) ==> 16 16进制字符串: int('0x10', 16) ==> 16 字节串转整数: 转义为short型整数: struct.unpack('<hh', bytes(b'\x01\x00\x00\x00')) ==> (1, 0) 转义为long型整数: struct.unpack('<L', bytes(b'\x01\x00\x00\x00')) ==> (1,) 整数转字节串: 转为两个字节: struct.pack('<HH', 1,2) ==> b'\x01\x00\x02\x00' 转为四个字节: struct.pack('<LL', 1,2) ==> b'\x01\x00\x00\x00\x02\x00\x00\x00' 字符串转字节串: 字符串编码为字节码: '12abc'.encode('ascii') ==> b'12abc' 数字或字符数组: bytes([1,2, ord('1'),ord('2')]) ==> b'\x01\x0212' 16进制字符串: bytes().fromhex('010210') ==> b'\x01\x02\x10' 16进制字符串: bytes(map(ord, '\x01\x02\x31\x32')) ==> b'\x01\x0212' 16进制数组: bytes([0x01,0x02,0x31,0x32]) ==> b'\x01\x0212' 字节串转字符串: 字节码解码为字符串: bytes(b'\x31\x32\x61\x62').decode('ascii') ==> 12ab 字节串转16进制表示,夹带ascii: str(bytes(b'\x01\x0212'))[2:-1] ==> \x01\x0212 字节串转16进制表示,固定两个字符表示: str(binascii.b2a_hex(b'\x01\x0212'))[2:-1] ==> 01023132 字节串转16进制数组: [hex(x) for x in bytes(b'\x01\x0212')] ==> ['0x1', '0x2', '0x31', '0x32']
内存16进制转字符串
offset = binascii.unhexlify(offset)
内存中0x416b34 转为Ak4