报文转义
题目描述
说明:
实现报文转义功能, 报文中如里出现0x0A,转义成为2个字节0x12 0x34, 如果出现0x0B,转义成为2个字节0xAB OXCD。 其他报文字节保持不变
输入描述:
- 输入的报文为16进制,输入报文长度不超过127,输入的报文第一个字节为报文长度,第一个字节(报文长度)算正式报文的一部分,但是不参与转义
输入的报文每个字节用空格隔开
输出描述:
输出为转义后的报文,转义后的报文长度也不超过255,输出到的报文第一个字节算正式报文的一部分,为转义后的报文长度
输出的报文内容都为大写的16进制,输出报文为16进制,前不带0x前缀
输出的报文每个字节用空格隔开
示例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进制的情况