python进制转换&字符串转二进制对象&整数转二进制对象&16进制字符串转二进制对象(及其逆转换)

(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'"

当然 encodedecode也是不错的选择:

>>> 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)
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值