Python中的字节填充/取消填充

时间:2017-05-22 14:22:55

标签: python byte

我想在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

2 个答案:

答案 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