2017-05-22 2 views
0

Je veux écrire un petit script en python qui fait un bourrage/unstuffing, car je n'ai aucune idée de la façon de le faire. Je vais juste commencer par le bourrage.Octet Stuffing/Unstuffing en Python

Donc, le but est simple, il y a une fonction avec trois entrées, quelque chose comme ceci: ByteStuffing(flagbyte, escapebyte, frame) et sortie avec des octets de drapeau au début et à la fin, et trame bourrée entre les deux.

laisse ainsi dire mon octet de drapeau est Z, échapper à l'octet est A et cadre LEONARDO

ByteStuffing(Z,A,LEONARDO) = ZLEONAARDOZ

P.S. escape byte échappe également les caractères du drapeau dans le cadre, pas seulement les octets d'échappement lui-même.

unstuffing est simplement une fonction inverse.

maintenant, je ne suis pas vraiment familier avec la programmation, je suis vraiment pas très créatif quand il s'agit de coder, c'est pourquoi je veux commencer avec ces petits projets, quelqu'un peut-il me donner des idées pour commencer avec ce problème?

Version p.s Python 2.7.12

EDIT: de la réponse de Keerthana Prabhakaran j'ai fini avec cela.

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; 

si j'essaie de le tester comme ceci:

def test(): 


assert applyByteStuffing("Z", "A", "TAZZA") == "ZTAAAZAZAAZ" 

if __name__ == '__main__':

test()

Je reçois erreur d'assertion. Quelqu'un at-il une idée de l'endroit où se produit mon erreur d'assertion?

juste essayer d'essayer ceci: applyByteStuffing("Z" , "A" , "TAZZA")

me donne la sortie correcte: ZTAAAZAZAAZ

+0

@NickA Je n'ai aucune idée ce qui est emballage peu. Je sais bourrage de bourrage et bourrage de bits et je veux dire farce octet, pas bit – Leonardo

+0

ah assez juste, je n'ai jamais entendu parler de bourrage d'octets avant –

Répondre

1

Vous pouvez utiliser str.replace() à cet effet. Remplacez le escapebyte par une autre chaîne avec le doublon, et bourrez la chaîne résultante avec le flagbyte!

>>> flagbyte + frame.replace(escapebyte,escapebyte*2)+ flagbyte 
'ZLEONAARDOZ' 

Pour la question mise à jour, vous devez retourner quelque chose de applyByteStuffing pour que la valeur de retour peut être affirmé à la chaîne sur RHS.

def applyByteStuffing(flagbyte, escapebyte, payload): 
    x = payload.replace (escapebyte, escapebyte*2) 
    y = x.replace (flagbyte, escapebyte+flagbyte) 
    return flagbyte + y + flagbyte #return value 

Et puis affirmer!

assert applyByteStuffing('Z','A','LEONARDO') == 'ZLEONAARDOZ' 
+0

merci pour l'idée, j'ai édité la question avant, en disant que je dois aussi échapper flag octets . J'ai donc élargi un peu votre solution et cela fonctionne globalement.Je vais modifier ma question maintenant avec un nouveau problème :) – Leonardo

+1

Heureux que cela a aidé! J'ai mis à jour ma réponse pour l'erreur d'assertion! –

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