机考题python解题思路分享

原题: LV编码是按 Tag Length Value格式进行编码的 一段码流中的信元用tag标识,tag在码流中唯一不重复 length表示信元value的长度 value表示信元的值 码流以某信元的tag开头 ,tag固定占一个字节 length固定占两个字节,字节序为小端序 现给定tlv格式编码的码流以及需要解码的信元tag 请输出该信元的value

    输入码流的16机制字符中,不包括小写字母
    且要求输出的16进制字符串中也不要包含字符字母
    码流字符串的最大长度不超过50000个字节

    输入描述
       第一行为第一个字符串 ,表示待解码信元的tag
       输入第二行为一个字符串, 表示待解码的16进制码流
      字节之间用空格分割
    输出描述
       输出一个字符串,表示待解码信元以16进制表示的value

       例子:
       输入:
        31
        32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC

       输出
        32 33

       说明:
       需要解析的信源的tag是31
       从码流的起始处开始匹配,tag为32的信元长度为1(01 00,小端序表示为1)
       第二个信元的tag为90 其长度为2
       第三个信元的tag为30 其长度为3
       第四个信元的tag为31 其长度为2(02 00)
       所以返回长度后面的两个字节即可 为 32 33
     */

"""解题思路,先把字符串都存入数组,并进行遍历,判断当前的tag是否是制定tag,关键在于 使用int函数将字符串转换为10进制,计算长度 """ tag=input() list1=input().split(' ') print(list1) i=0 length=0 while i<len(list1): if list1[i]==tag: length = int(list1[i + 2] + list1[i+1], 16) break else: length=int(list1[i+2]+list1[i+1],16) print('length',length) i+=3+length print('i',i)

print(list1[i+3:i+3+length])

print(' '.join(list1[i+3:i+3+length]))

全部评论

相关推荐

xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客企业服务