(1)数字进制转换
int() 函数用于将一个字符串或数字转换为整型。
- x – 字符串或数字。
- base – 进制数,默认十进制。
- 如果是带参数base的话,要以字符串的形式进行输入
>>> int('10',8)
8
hex() 函数用于将一个指定数字转换为 16 进制数。
>>>hex(255)
'0xff'
oct() 函数将一个整数转换成 8 进制字符串,8 进制以 0o 作为前缀表示。
>>> oct(10)
'0o12'
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
>>>bin(10)
'0b1010'
(2)字符串转二进制对象 && 二进制对象转字符串
bytes() 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。
>>> a = bytes('hello','ascii')
>>> a
b'hello'
str() 万物转字符串函数哈哈,可以把二进制对象转换成字符串
>>> str(a)
"b'hello'"
当然 encode 和 decode也是不错的选择:
>>> a = 'hello'.encode()
>>> a
b'hello'
>>> a.decode()
'hello'
bytes() 对比 bytearray():
>>> a = bytes('hello','ascii')
>>> a
b'hello'
>>> a[0] = a[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'bytes' object does not support item assignment
>>> type(a)
<class 'bytes'>
>>> b = bytearray('hello','ascii')
>>> b
bytearray(b'hello')
>>> b[0] = b[1]
>>> b
bytearray(b'eello')
>>> type(b)
<class 'bytearray'>
注意到bytearray是可变的
(3)字符转ASCII(unicode) && ASCII(unicode) 转字符
chr() 用一个整数作参数,返回一个对应的字符。
- 可以是 10 进制也可以是 16 进制的形式的数字,数字范围为 0 到 1,114,111 (16 进制为0x10FFFF)。
>>>chr(0x30)
'0'
>>> chr(97)
'a'
>>> chr(8364)
'€'
ord() 函数是 chr() 函数(对于 8 位的 ASCII 字符串)的配对函数,它以一个字符串(Unicode 字符)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值。
>>>ord('a')
97
>>> ord('€')
8364
(4)二进制对象转整数 && 整数转化成二进制对象
int.from_bytes()功能是将二进制对象转化成整数。'12’如果没有标明进制,看做ascii码值
num1 = int.from_bytes(b'12', byteorder = 'big')
# '12':0011 0001 0011 0010 (大端:数据低位靠左(大)存)
num2 = int.from_bytes(b'12', byteorder = 'little')
# '12':0011 0010 0011 0001 (小端:数据低位靠右(小)存)
print(num1,num2)
# 12594 12849
- 第一个参数:要转化的二进制对象
- byteorder:存储方式(大小端)
- signed:表示是否是无符号数
(number).to_bytes()功能将整数转化成二进制对象
byt1 = (1024).to_bytes(2, byteorder = 'big')
byt2 = (1024).to_bytes(10, byteorder = 'big')
byt3 = (-1024).to_bytes(10, byteorder= 'big',signed= True) # 负数由补码表示
lis1 = ['byt1', 'byt2','byt3']
lis2 = [byt1, byt2, byt3]
lis3 = zip(lis1, lis2)
dic = dict(lis3)
print(dic)
# 'byt1': b'\x04\x00'
# 'byt2': b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
# 'byt3': b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
- 第一个参数:要存放的字节数
大整数转二进制对象
byt1 = (2077392566271395359695912870032509).to_bytes(15, byteorder = 'big')
print(byt1)
# b'\x00flag{B4by_Rs4}'
(5)十六进制字符串转二进制对象 && 二进制对象转十六进制字符串
hexlify&unhexlify
import binascii
s = b'abcde'
h = binascii.b2a_hex(s) # 二进制 转16进制 '6162636465'
print(h)
h = binascii.hexlify(s) # 作用同上
print(h)
s = binascii.a2b_hex(h) # 16进制转二进制 b'abcde'
print(s)
s = binascii.unhexlify(h) # 作用同上
print(s)