python使用的过程中,总是会遇到各种各样的数据转换,从二进制到十进制再到十六进制,从字节串到整数再到byte流,从列表到字典再到字符串......
常见的数据转换:
1)整数之间的转换
10进制转2进制: bin(22) => 0b10110
10进制转8进制: oct(22) => 0o26
10进制转16进制: hex(22) => 0x16
2进制转10进制: int('0b10110', 2) => 22
8进制转10进制: int('0o26', 8) =>22
16进制转10进制: int('0x16', 16) => 22
2)整数与字符串之间的转换
10进制字符串转整数: int('10') => 10
16进制字符串转整数: int('10', 16) => 16
16进制字符串转整数: int('0x10', 16) => 16
10进制整数转字符串: str(10)=> '10'
16进制整数转字符串: str(0x10) => '16'
3)字节码转换
字节码解码为十六进制字符: b'\x31'.hex() => 31
字节码解码为十六进制字符串: b'31\x32'.hex() => 3132
字节码解码为ascii字符: b'\x61'.decode('ascii') => a
字节码解码为字符串: b'\x61\x62'.decode('ascii') => ab
字节码解码为字符串: b'\x31\x32\x61\x62'.decode('ascii') => 12ab
字节码解码为short型整数: struct.unpack('<h', b'\x02\x00') => (2,)
字节码解码为short型整数: struct.unpack('<hh', b'\x02\x00\x08\x00') => (2, 8)
字节码解码为long型整数: struct.unpack('<l', b' \x01\x00\x00\x00') => (1,)
字节码解码为long型整数: struct.unpack('<ll', b'\x01\x00\x00\x00\x02\x00\x00\x00') => (1, 2)
字节码解码为16进制数组: [hex(x) for x in bytes(b'\x01\x0234')] => ['0x1', '0x2', '0x33', '0x34']
单整数列表解码为字节码: bytes([1]) => b' \x01'
多整数解码为字节码: bytes([1,2, 3, 97, 98, 99]) => b'\x01\x02\x03abc'
多整数解码为字节码: bytes([1,2, 3, ord('4'), ord('5') , ord('6') ]) => b'\x01\x02\x03456'
字符解码为字节码: '1'.encode('ascii') => b'1'
字符串解码为字节码: '123abc'.encode('ascii') => b'123abc'
short型整数转为字节码: struct.pack('<H', 1) => b'\x01\x00' (h or H大小写都可以)
short型整数转为字节码: struct.pack('<HH', 1,2) => b'\x01\x00\x02\x00'
long型整数转为字节码: struct.pack('<L', 1) => b'\x01\x00\x00\x00'
long型整数转为字节码: struct.pack('<LL', 1,2) => b'\x01\x00\x00\x00\x02\x00\x00\x00'
16进制字符串转为字节码: bytes().fromhex('4102') => b'A\x02'
16进制字符串 转为字节码: bytes(map(ord, '\x01\x02\x41\x42')) => b'\x01\x02AB'
16进制列表转为字节码: bytes([0x01,0x02,0x41,0x42]) => b'\x01\x02AB'
拓展:
1. struct.pack 和struct.unpack其他类型的转换,如float,uint...
struct.pack('f', xxx)
struct.uppack('<f', xxx)
2. byte转换 - https://www.jianshu.com/p/62a818fd8cd2
struct.pack('4B', *x)
网友评论