美文网首页
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