python常用的十进制、16进制、字符串、字节串之间的转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等
废话不多上,直接上例子
整数之间的进制转换:
- 10进制转16进制: hex(16) ==> 0x10
- 16进制转10进制: int("0x10", 16) ==> 16
-------------------
字符串转整数:
- 10进制字符串: int("10") ==> 10
- 16进制字符串: int("10", 16) ==> 16
- 16进制字符串: int("0x10", 16) ==> 16
-------------------
字节串转整数:
- 转义为short型整数: struct.unpack("<hh", bytes(b"x01x00x00x00")) ==> (1, 0)
- 转义为long型整数: struct.unpack("<L", bytes(b"x01x00x00x00")) ==> (1,)
-------------------
整数转字节串:
- 转为两个字节: struct.pack("<HH", 1,2) ==> b"x01x00x02x00"
- 转为四个字节: struct.pack("<LL", 1,2) ==> b"x01x00x00x00x02x00x00x00"
-------------------
字符串转字节串:
- 字符串编码为字节码: "12abc".encode("ascii") ==> b"12abc"
- 数字或字符数组: bytes([1,2, ord("1"),ord("2")]) ==> b"x01x0212"
- 16进制字符串: bytes().fromhex("010210") ==> b"x01x02x10"
- 16进制字符串: bytes(map(ord, "x01x02x31x32")) ==> b"x01x0212"
- 16进制数组: bytes([0x01,0x02,0x31,0x32]) ==> b"x01x0212"
-------------------
字节串转字符串:
- 字节码解码为字符串: bytes(b"x31x32x61x62").decode("ascii") ==> 12ab
- 字节串转16进制表示,夹带ascii: str(bytes(b"x01x0212"))[2:-1] ==> x01x0212
- 字节串转16进制表示,固定两个字符表示: str(binascii.b2a_hex(b"x01x0212"))[2:-1] ==> 01023132
- 字节串转16进制数组: [hex(x) for x in bytes(b"x01x0212")] ==> ["0x1", "0x2", "0x31", "0x32"]
===================
copyright © 2008-2019 入门客AI创业平台 版权所有 备案号:湘ICP备2023012770号