整数之间互转
-
十进制转2进制:
bin(22) #0b10110
-
十进制转8进制:
oct(22) #0o26
-
十进制转16进制:
hex(22) #0x16
-
2进制转十进制:
int('0b10110', 2) # 22
-
8进制转十进制:
int('0o26', 8) # 22
-
16进制转十进制:
int('0x16', 16) #22
整数与字符串互转
-
十进制字符串转整数
int('10') # 10
-
16进制字符串转整数
int('10', 16) # 16 int('0x10', 16) # 16
-
十进制整数转字符串
str(10) #'10'
-
16进制整数转字符串
str(0x10) #'16'
字节码编解码
字节解码
解码为字符串:
# 解为16进制字符串
b'\x31'.hex() # '31'
b'\x31\x32'.hex() # '3132'
# 解为ASCII字符(字节以16进制ASCII值表示)
b'\x61'.decode('ascii') # 'a'
b'\x61\x62'.decode('ascii') # 'ab'
b'\x31\x32\x61\x62'.decode('ascii') # '12ab'
# 解为16进制字符串数组
[hex(x) for x in b'\x01\x0234'] # ['0x1', '0x2', '0x33', '0x34']
解码为整数:
import struct
# 解为十进制数组
[x for x in b'\x01\x0234'] # [1, 2, 51, 52]
# 解为short型整数元组
struct.unpack('<h', b'\x02\x00') # (2,)
struct.unpack('<hh', b'\x02\x00\x08\x00') # (2, 8)
# 解为long型整数元组
struct.unpack('<l', b' \x01\x00\x00\x00') # (1,)
struct.unpack('<ll', b'\x01\x00\x00\x00\x02\x00\x00\x00') # (1, 2)
字节编码
# ASCII字符编码为字节(结果以ASCII字符表示字节)
'1'.encode('ascii') # b'1'
'12ab'.encode('ascii') # b'12ab'
# ASCII值(16进制)编码为字节(结果以ASCII字符表示字节)
bytes().fromhex('31326162') # b'12ab';31是数字1的ASCII值(49)的16进制表示,后面同理
bytes(map(ord, '\x01\x02\x33\x34')) # b'\x01\x0234'
# 整数列表
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'
bytes([0x01,0x02,0x33,0x34]) # b'\x01\x0234'
import struct
# short型整数
struct.pack('<H', 1) # b'\x01\x00' (h or H大小写都可以)
struct.pack('<HH', 1,2) # b'\x01\x00\x02\x00'
# long型整数
struct.pack('<L', 1) # b'\x01\x00\x00\x00'
struct.pack('<LL', 1,2) # b'\x01\x00\x00\x00\x02\x00\x00\x00'
字节拼接
struct转换其他类型
struct可以[字节转换float、uint等类型][https://www.jianshu.com/p/62a818fd8cd2]:
hex转float
import struct
a=[0x45,0xaf,0xb9,0xdd]
s=struct.unpack(">f",bytes(a))[0] #5623.23291015625
b='45afb9dd'
s=struct.unpack('>f',bytes.fromhex(b))[0] # 5623.23291015625
- 其中struct.unpack返回的是一个元组
float转hex
import struct
s=5623.23291015625
struct.pack('>f' ,float(s)).hex() #'45afb9dd'