python

python中的数据转换

2021-12-27  本文已影响0人  小白兔胡萝卜

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)

上一篇 下一篇

猜你喜欢

热点阅读