python常用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)分类:Python2014-08-2700:193792人阅读评论(2)收藏举报python编码16进制进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等废话不多上,直接上例子整数之间的进制转换:10进制转16进制:hex(16)==0x1016进制转10进制:int('0x10',16)==16类似的还有oct(),bin()-------------------字符串转整数:10进制字符串:int('10')==1016进制字符串:int('10',16)==1616进制字符串: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)forxinbytes(b'\x01\x0212')]==['0x1','0x2','0x31','0x32']===================测试用的python源码[python]viewplaincopy1.'''''2.Createdon2014年8月21日3.4.@author:lenovo5.'''6.importbinascii7.importstruct8.9.10.defexample(express,result=None):11.ifresult==None:12.result=eval(express)13.print(express,'==',result)14.15.16.if__name__=='__main__':17.18.print('整数之间的进制转换:')19.print(10进制转16进制,end=':');example(hex(16))20.print(16进制转10进制,end=':');example(int('0x10',16))21.print(类似的还有oct(),bin())22.23.print('\n-------------------\n')24.25.print('字符串转整数:')26.print(10进制字符串,end=:);example(int('10'))27.print(16进制字符串,end=:);example(int('10',16))28.print(16进制字符串,end=:);example(int('0x10',16))29.30.print('\n-------------------\n')31.32.print('字节串转整数:')33.print(转义为short型整数,end=:);example(rstruct.unpack('hh',bytes(b'\x01\x00\x00\x00')))34.print(转义为long型整数,end=:);example(rstruct.unpack('L',bytes(b'\x01\x00\x00\x00')))35.36.print('\n-------------------\n')37.38.print('整数转字节串:')39.print(转为两个字节,end=:);example(struct.pack('HH',1,2))40.print(转为四个字节,end=:);example(struct.pack('LL',1,2))41.42.print('\n-------------------\n')43.44.print('字符串转字节串:')45.print('字符串编码为字节码',end=:);example(r'12abc'.encode('ascii'))46.print('数字或字符数组',end=:);example(rbytes([1,2,ord('1'),ord('2')]))47.print('16进制字符串',end=':');example(rbytes().fromhex('010210'))48.print('16进制字符串',end=':');example(rbytes(map(ord,'\x01\x02\x31\x32')))49.print('16进制数组',end=':');example(r'bytes([0x01,0x02,0x31,0x32])')50.51.print('\n-------------------\n')52.53.print('字节串转字符串:')54.print('字节码解码为字符串',end=:);example(rbytes(b'\x31\x32\x61\x62').decode('ascii'))55.print('字节串转16进制表示,夹带ascii',end=:);example(rstr(bytes(b'\x01\x0212'))[2:-1])56.print('字节串转16进制表示,固定两个字符表示',end=:);example(rstr(binascii.b2a_hex(b'\x01\x0212'))[2:-1])57.print('字节串转16进制数组',end=:);example(r[hex(x)forxinbytes(b'\x01\x0212')])58.59.60.print('\n===================\n')61.print(以上原理都比较简单,看一下就明白了。这里仅仅是抛砖引玉,有更好更简单的方法,欢迎欢迎)以上原理都比较简单,看一下就明白了。这里仅仅是抛砖引玉,有更好更简单的方法,欢迎欢迎字符串与数组的转换方法['x','y','z']='xyz'b=''.join(['x','y','z'])'xyz'=['x','y','z']a=list('xyz')binascii.a2b_hex(hexstr)binascii.unhexlify(hexstr)Returnthebinarydatarepresentedbythehexadecimalstringhexstr.Thisfunctionistheinverseofb2a_hex().hexstrmustcontainanevennumberofhexadecimaldigits(whichcanbeupperorlowercase),otherwiseaTypeErrorisraised.a='\x00\x91\xe2\xbe\xf1\x00\x04\xc4\x94\xba\xf7\xa2\x11\xf7\x11f\xe4A\x1c\xcc'importbinasciibinascii.b2a_hex(a)'0091e2bef10004c494baf7a211f71166e4411ccc'str1=fadsfasfprintbinascii.b2a_hex(str1)'6661647366617366'python字符串str和字节数组相互转化#bytesobjectb=bexample#strobjects=example#strtobytesbytes(s,encoding=utf8)#bytestostrstr(b,encoding=utf-8)#analternativemethod#strtobytesstr.encode(s)#bytestostrbytes.decode(b)python字符串与数字的转化分类:python编程2012-03-2415:4715970人阅读评论(0)收藏举报python数字变为字符串str(4)字符串变为数字string.atoi(s,[,base])//base为进制基数浮点数转换string.atof(s)字符转数字int(str)