美文网首页
Python中bit与hex的转换

Python中bit与hex的转换

作者: welder77 | 来源:发表于2022-05-02 06:21 被阅读0次

    上一次我们说到了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
    

    相关文章

      网友评论

          本文标题:Python中bit与hex的转换

          本文链接:https://www.haomeiwen.com/subject/wgzdyrtx.html