我想在python中编写一个小脚本来执行字节填充/取消填充,因为我不知道如何执行任何操作我只是先填充填充。
所以,目标很简单,有一个带三个输入的函数,如下所示:ByteStuffing(flagbyte, escapebyte, frame)
并在开头和结尾输出标志字节,并在其间输入填充帧。
所以我要说我的标志字节是Z,转义字节是A和帧LEONARDO
ByteStuffing(Z,A,LEONARDO) = ZLEONAARDOZ
P.S。转义字节也会转义帧中的标志字符,而不仅仅是转义字节本身。
unstuffing只是反向功能。
现在,我真的不熟悉编程,只是刚开始,所以在编码时我真的不是很有创意,这就是为什么我想从这个小'项目'开始,有人可以给我一些想法如何获得从这个问题开始?
p.s Python version 2.7.12
修改 来自Keerthana Prabhakaran的回答我最终得到了这个。
def applyByteStuffing(flagbyte, escapebyte, payload):
flagbyte = ("Z")
escapebyte = ("A")
x = payload.replace (escapebyte, escapebyte*2)
y = x.replace (flagbyte, escapebyte+flagbyte)
print (flagbyte + y + flagbyte)
return;
如果我尝试像这样测试它:
def test():
assert applyByteStuffing("Z", "A", "TAZZA") == "ZTAAAZAZAAZ"
if __name__ == '__main__':
test()
我收到断言错误。有谁知道我的断言错误发生在哪里?
试着尝试这个:
applyByteStuffing("Z" , "A" , "TAZZA")
给了我正确的输出:ZTAAAZAZAAZ
答案 0 :(得分:1)
您可以使用str.replace()来实现此目的。用另一个带有副本的字符串替换escapebyte,并用flagbyte填充结果字符串!
>>> flagbyte + frame.replace(escapebyte,escapebyte*2)+ flagbyte
'ZLEONAARDOZ'
对于更新的问题,您需要从applyByteStuffing
返回一些内容,以便可以针对RHS上的字符串声明返回值。
def applyByteStuffing(flagbyte, escapebyte, payload):
x = payload.replace (escapebyte, escapebyte*2)
y = x.replace (flagbyte, escapebyte+flagbyte)
return flagbyte + y + flagbyte #return value
然后断言!
assert applyByteStuffing('Z','A','LEONARDO') == 'ZLEONAARDOZ'
答案 1 :(得分:0)
bits=[1,0,0,1,1,1,1,1,0,1,1,0]
stuffed=[]
count=0
for i in range(len(bits)):
if bits[i]==1:
count=count+1
stuffed.append(bits[i])
elif bits[i]!=1:
count=0
stuffed.append(bits[i])
if count==5:
stuffed.insert(i+1,0)
print stuffed
#Take any input the code works perfectly. #Tested