Python中bit与hex的转换

上一次我们说到了Hex与Bytes的转换,很快我们又遇到了bit位的判断。

场景如下:我们需要判断DTC_Status的8个bit中任意一个或几个bit的状态。假设DTC_Status=0x2F,我们需要判断bit0和bit3是否为1.

解决这个问题的方法有很多。程序员往往喜欢用bit移位后与上0或1来进行判断。
但我总觉得这种方法不够直观,所以我通常会将每一个Bit都展开后,再去判断。

下面写一下大致的思路。

  1. 首先将Byte转为Bit, 这里用到了python自带的bin函数,zfill意为补齐8位。
DTC_Status = bin(DTC_Status)[2:].zfill(8) 
#DTC_Status = '00101111'

转换后,DTC_Status已经是一个字符串了,其中包含了8个bits的0,1状态。

  1. 随后,我们可以写一个判断函数来比对实际和预期的bit位,
def bits_compare(act_byte, exp_bit):

    if len(act_byte) != len(exp_bit):
        print("bits_compare lenth different")
        return False

    i = 0
    result = True
    for exp, act in zip(exp_bit, act_byte):
        i += 1
        if exp == "x":
            continue
        if exp != act:
            result = False
            break
    return result, i

有了这个函数后,我们就可以用bits_compare(DTC_Status , 'xxxx1xx1')的方式来判断DTC_Status了。x代表不需要判断的位。

这里也顺便提下,有时,我们也需要将一个二进制的值,如:'00001001' 转为十进制或十六进制。
此时,我们可以用int,加参数2来实现。通过字符串的切片操作,我们也可以更改某个bit的值。

int_10= int('00001001',2)
#int_10 = 9
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容