微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用带有编解码器的解包

如何解决如何使用带有编解码器的解包

我试图运行用 3.5 之前版本编写的 python 脚本,当我运行它时出现错误,所以我试图更新该函数,但仍然无法找出问题所在。 这是我的代码

# Main message decoding routine
# Input: diameter message as HEX string
# Result: class H with splitted message (header+message)
# AVPs in message are NOT splitted
def stripHdr(H,msg):
    dbg = "Incoming Diameter msg",msg
    logging.info(dbg)
    if len(msg) == 0:
        return ERROR
    (sver,msg) = chop_msg(msg,2)
    (slen,6)
    (sflag,2)
    (scode,6)
    (sapp,8)
    (shbh,8)
    (sete,8)
    dbg = "Split hdr","V",sver,"L",slen,"F",sflag,"C",scode,"A",sapp,"H",shbh,"E",sete,"D",msg
    logging.debug(dbg)
    #H.ver = ord(sver.decode("hex"))
    H.ver = ord(codecs.decode(sver,'hex'))
    H.flags = ord(codecs.decode(sflag,'hex'))
    #H.len = struct.unpack("!I","\00"+slen.decode("hex"))[0]
    H.len = struct.unpack("!I","\00"+codecs.decode(slen,'hex'))[0]
    H.cmd = struct.unpack("!I","\00"+scode.decode("hex"))[0]
    H.appId = struct.unpack("!I",sapp.decode("hex"))[0]
    H.HopByHop = struct.unpack("!I",shbh.decode("hex"))[0]
    H.EndToEnd = struct.unpack("!I",sete.decode("hex"))[0]
    dbg="Read",H.ver,H.len,H.flags,H.cmd,H.appId,H.HopByHop,H.EndToEnd
    logging.debug(dbg)
    dbg = dictCOMMANDcode2name(H.flags,H.cmd)
    logging.info(dbg)
    H.msg = msg
    return

我收到以下错误

  File "diameter-client.py",line 306,in <module>
    stripHdr(CEA,codecs.encode(received,encoding="hex"))
  File "/home/centos/pyprotosim_python3-master/libDiameter.py",line 786,in stripHdr
    H.len = struct.unpack("!I",'hex'))[0]
TypeError: must be str,not bytes

非常感谢任何帮助。非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。