报文转义

题目描述

说明:

实现报文转义功能, 报文中如里出现0x0A,转义成为2个字节0x12 0x34, 如果出现0x0B,转义成为2个字节0xAB OXCD。 其他报文字节保持不变

输入描述:

  1. 输入的报文为16进制,输入报文长度不超过127,输入的报文第一个字节为报文长度,第一个字节(报文长度)算正式报文的一部分,但是不参与转义
  2. 输入的报文每个字节用空格隔开

    输出描述:

  3. 输出为转义后的报文,转义后的报文长度也不超过255,输出到的报文第一个字节算正式报文的一部分,为转义后的报文长度

  4. 输出的报文内容都为大写的16进制,输出报文为16进制,前不带0x前缀

  5. 输出的报文每个字节用空格隔开

示例1

输入

8 1 2 3 4 5 6 A

输出

9 1 2 3 4 5 6 12 34

说明

输入报文 8 1 2 3 4 5 6 A 解释:8 为报文长度 输出报文 9 1 2 3 4 5 6 12 34 解释: 9为报文长度, 12 34为输入报文中A 转义后的报文

实现代码

# -*- coding: utf-8 -*-
import sys
line = sys.stdin.readline()
baowen_arr = line.strip().split(" ")
# baowen_arr = ["10", "0x00", "2", "0x01" ,"0x10", "0x0b", "0xaE", "0x1a"]

baowen_arr = baowen_arr[1:int(baowen_arr[0], 16)]
new_baowen_arr = ["0"]
for v in baowen_arr:
    v = v.replace("0x", "").replace("0X", "")
    if v.upper() == "0A" or v.upper() == "A":
        new_baowen_arr.append("12")
        new_baowen_arr.append("34")
        continue
    if v.upper() == "0B" or v.upper() == "B":
        new_baowen_arr.append("AB")
        new_baowen_arr.append("CD")
        continue
    if v.isdigit():
        v = str(int(v))
    new_baowen_arr.append(v)
new_baowen_arr[0] = str(hex(len(new_baowen_arr))).replace("0x", "").replace("0X", "")
print(" ".join(new_baowen_arr[:256]).upper())

总结

没有考虑到转义后报文的长度也要转换为16进制的情况