asn.1文件(test.asn)如下,我想用python对文件进行编码得到asn.1的位串,但是当我用python按照not ber编码时,出现错误。我不知道异常的含义是什么。请帮忙检查一下。
RRC DEFINITIONS ::=BEGIN
RRCConnectionRequest-NB ::= SEQUENCE {
criticalExtensions CHOICE {
rrcConnectionRequest-r13 RRCConnectionRequest-NB-r13-IEs,
criticalExtensionsFuture SEQUENCE {}
}
}
RRCConnectionRequest-NB-r13-IEs ::= SEQUENCE {
ue-Identity-r13 InitialUE-Identity,
establishmentCause-r13 EstablishmentCause-NB-r13,
multiToneSupport-r13 ENUMERATED {true} OPTIONAL,
multiCarrierSupport-r13 ENUMERATED {true} OPTIONAL,
spare BIT STRING (SIZE (22))
}
EstablishmentCause-NB-r13 ::= ENUMERATED {
mt-Access, mo-Signalling, mo-Data, mo-ExceptionData,
delayTolerantAccess-v1330, spare3, spare2, spare1}
InitialUE-Identity ::= CHOICE {
randomValue BIT STRING (SIZE (40))
}
END
python代码如下:
def asn_try():
rrc = asn1tools.compile_files('/home/zhf/py_prj/test.asn','per')
encoded = rrc.encode('RRCConnectionRequest-NB',
{'criticalExtensions': ('rrcConnectionRequest-r13', {
'ue-Identity-r13': ('randomValue', (b'01', 2)), 'establishmentCause-r13': 'mt-Access',
'multiToneSupport-r13': 'true', 'multiCarrierSupport-r13': 'true', 'spare': (b'01', 2)})})
print(encoded.hex())
print(encoded)
print(rrc.decode('RRCConnectionRequest-NB', encoded))
但错误还是发生了:
Traceback (most recent call last):
File "/home/zhf/py_prj/function_test/asn_try.py", line 36, in <module>
asn_try()
File "/home/zhf/py_prj/function_test/asn_try.py", line 15, in asn_try
print(rrc.decode('RRCConnectionRequest-NB', encoded))
File "/usr/local/lib/python3.6/dist-packages/asn1tools/compiler.py", line 116, in decode
return self._types[name].decode(data)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 1541, in decode
return self._type.decode(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 764, in decode
return self.decode_root(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 776, in decode_root
value = member.decode(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 1354, in decode
return self.decode_root(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 1365, in decode_root
return (member.name, member.decode(decoder))
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 764, in decode
return self.decode_root(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 776, in decode_root
value = member.decode(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 1354, in decode
return self.decode_root(decoder)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 1365, in decode_root
return (member.name, member.decode(decoder))
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 991, in decode
value = decoder.read_bits(number_of_bits)
File "/usr/local/lib/python3.6/dist-packages/asn1tools/codecs/per.py", line 317, in read_bits
raise OutOfDataError(self.number_of_read_bits())
asn1tools.codecs.per.OutOfDataError: criticalExtensions: ue-Identity-r13: out of data at bit offset 8 (1.0 bytes)