python二进制进制转换以及二进制单比特操作-工具(七)


在计算机进行数据交换时,常常会有一个进制转换的过程,有时候数据过于庞大,为了方便存储管理,计算机会使用十六进制存储数据,Python一般采用int类型是十进制,作为硬件行业采用Python处理二进制、十六进制数据成为必然。

一、pyhton 进制转换
1.1 十进制转为二、八、十六进制

方法一:函数直转

十进制转二进制:bin(10) --> '0b1010' tpye:是字符串类型 0b:表示2进制
十进制转八进制:oct(10) --> '0o12'   tpye:是字符串类型 0o:表示8进制
十进制转十六进制:hex(10) --> '0xa'    tpye:是字符串类型 0x:表示16进制

方法二:Format格式

>>> '{:b}'.format(9)   --> '1001'
>>> '{:o}'.format(9)   --> '11'
>>> '{:x}'.format(10)  --> 'a'

两种方式会影响到打印,但是python还是可以识别出已转化的数据。

1.2 二、八、十六进制转为十进制

方法一:int()函数

int('0b1010',2) --> 10 或者 int('1010',2) --> 10  
int('0o12',8)   --> 10 或者 int('12',8)   --> 10  
int('0xa',16)   --> 10 或者 int('a',16)   --> 10

方法二:eval函数

>>> eval('1111')       -->1111
>>> eval('0b1111')     -->15
>>> eval('0o1111')     -->585
>>> eval('0x1111')     -->4369

(x,y)括号中x是需要转换的数值type必须是str字符串类型,y是当前进制数

1.3 将十进制转换为固定长度的多进制类型

方法一:Format

>>> '{:08b}'.format(9)     -->'00001001'
>>> '{:06o}'.format(9)     -->'000011'
>>> '{:06x}'.format(9)     -->'000009'
备注:'{:08b}'.format(9) # :b表示转换为二进制,08表示高位用0补够8位

方法二:str.zfill

>>> a =bin(5)[2:]
>>> print(a)               -->101
>>> c = str.zfill(a,8)
>>> print(c)               -->00000101

>>> a =oct(9)[2:]
>>> print(a)               -->11
>>> c = str.zfill(a,8)
>>> print(c)               -->00000011

>>> a =hex(20)[2:]#去掉前面0b
>>> print(a)               -->14
>>> a =hex(20)
>>> print(a)               -->'0x14'
>>> str.zfill(a,8)         -->'00000x14'
二、Python二进制单比特操作

硬件中对于二进制数据的单比特操作是很常见的,verilog中也将每一比特单独的信号线作为区分,可以单比特调用。Python中虽然二进制数据也区分比特,但是获取更改某一比特却没有直接函数,参考文档【3】编写读取、调用函数。

得到某个字节中某一位(Bit)的值

:param byte: 待取值的字节值

:param index: 待读取位的序号,从右向左0开始,0-7为一个完整字节的8个位

:returns: 返回读取该位的值,0或1

def get_bit_val(byte, index):
    if byte & (1 << index):
		return 1
	else:
		return 0

更改某个字节中某一位(Bit)的值

:param byte: 准备更改的字节原值

:param index: 待更改位的序号,从右向左0开始,0-7为一个完整字节的8个位

:param val: 目标位预更改的值,0或1

:returns: 返回更改后字节的值

def set_bit_val(byte, index, val):
	if val:
		return byte | (1 << index)
	else:
		return byte & ~(1 << index)
参考文档

【1】用Python实现进制转换,这一篇教程就够了

【2】python–>二进制的用法

【3】python获取二进制bit位_Python读字节某一位的值,设置某一位的值,二进制位操作…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paul安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值