Python中bit与hex的转换

内容分享3小时前发布
0 0 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

© 版权声明

相关文章

暂无评论

none
暂无评论...