ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: * 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('  (1, 0) * 转义为long型整数: struct.unpack('  (1,) ------------------- 整数转字节串: * 转为两个字节: struct.pack('  b'\x01\x00\x02\x00' * 转为四个字节: struct.pack('  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'] =================== 测试用的python源码 **[python]** [view plain](http://blog.csdn.net/crylearner/article/details/38521685# "view plain") [copy](http://blog.csdn.net/crylearner/article/details/38521685# "copy") 1. '''''  2. Created on 2014年8月21日  3.   4. @author: lenovo  5. '''   6. import binascii   7. import struct   8.    9.    10. def example(express, result=None):   11.     if result == 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(r"struct.unpack(')   34.     print("转义为long型整数", end=": ");example(r"struct.unpack(')   35.    36.     print('\n-------------------\n')   37.    38.     print('整数转字节串:')   39.     print("转为两个字节", end=": ");example("struct.pack(')   40.     print("转为四个字节", end=": ");example("struct.pack(')   41.        42.     print('\n-------------------\n')   43.        44.     print('字符串转字节串:')   45.     print('字符串编码为字节码', end=": ");example(r"'12abc'.encode('ascii')")   46.     print('数字或字符数组', end=": ");example(r"bytes([1,2, ord('1'),ord('2')])")   47.     print('16进制字符串', end=': ');example(r"bytes().fromhex('010210')")   48.     print('16进制字符串', end=': ');example(r"bytes(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(r"bytes(b'\x31\x32\x61\x62').decode('ascii')")   55.     print('字节串转16进制表示,夹带ascii', end=": ");example(r"str(bytes(b'\x01\x0212'))[2:-1]")   56.     print('字节串转16进制表示,固定两个字符表示', end=": ");example(r"str(binascii.b2a_hex(b'\x01\x0212'))[2:-1]")   57.     print('字节串转16进制数组', end=": ");example(r"[hex(x) for x in bytes(b'\x01\x0212')]")   58.        59.        60.     print('\n===================\n')   61.     print("以上原理都比较简单,看一下就明白了。这里仅仅是抛砖引玉,有更好更简单的方法,欢迎欢迎")   以上原理都比较简单,看一下就明白了。这里仅仅是抛砖引玉,有更好更简单的方法,欢迎欢迎