0

我尝试使用prettyInpython 库中的方法pyasn1.type.univ.BitString

这个方法需要一个字符串,但无论我传入什么,在 python 交互式 shell 中都会引发异常pyasn1.error.PyAsn1Error: Unknown bit identifier。我在谷歌上查找了该方法的源代码,这是我发现的:

def prettyIn(self, value):
    r = []
    if not value:
        return ()
    elif isinstance(value, str):
        if value[0] == '\'':
            if value[-2:] == '\'B':
                for v in value[1:-2]:
                    if v == '0':
                        r.append(0)
                    elif v == '1':
                        r.append(1)
                    else:
                        raise error.PyAsn1Error(
                            'Non-binary BIT STRING initializer %s' % (v,)
                            )
                return tuple(r)
            elif value[-2:] == '\'H':
                for v in value[1:-2]:
                    i = 4
                    v = int(v, 16)
                    while i:
                        i = i - 1
                        r.append((v>>i)&0x01)
                return tuple(r)
            else:
                raise error.PyAsn1Error(
                    'Bad BIT STRING value notation %s' % value
                    )                
        else:
            for i in value.split(','):
                j = self.__namedValues.getValue(i)
                if j is None:
                    # THIS IS THE PROBLEMATIC LINE
                    raise error.PyAsn1Error(
                        'Unknown bit identifier \'%s\'' % i
                        )
                if j >= len(r):
                    r.extend([0]*(j-len(r)+1))
                r[j] = 1
            return tuple(r)
    elif isinstance(value, (tuple, list)):
        r = tuple(value)
        for b in r:
            if b and b != 1:
                raise error.PyAsn1Error(
                    'Non-binary BitString initializer \'%s\'' % (r,)
                    )
        return r
    elif isinstance(value, BitString):
        return tuple(value)
    else:
        raise error.PyAsn1Error(
            'Bad BitString initializer type \'%s\'' % (value,)
            )

有谁知道这个方法接受什么样的字符串?此方法用于我必须调试且无法更改的程序中。

谢谢你的帮助,

鼓手库本图

4

1 回答 1

-2

刚刚看到这个问题,因为我目前正在研究它,我可以告诉你。

http://transit.iut2.upmf-grenoble.fr/doc/python-pyasn1/pyasn1-tutorial.html#1.1.6

位串 ::= '10101110111110001010110101101101 1011000101010000010110101100010 0110101010000111101010111111110'B 签名位串 ::= '0DE092010B39301

这意味着,univ.BitString("'AF01330CD932093392100B39FF00DE0'H")

于 2017-02-15T14:56:13.620 回答