Zerocode
Revision as of 22:29, 18 December 2007 by Saijanai Kuhn (talk | contribs) (added zero_decode_ID(inputbuf))
zero encoding and decoding functions and a couple of useful functions from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/510399
<python># From http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/510399
def ByteToHex( byteStr ):
""" Convert a byte string to it's hex string representation e.g. for output. """ # Uses list comprehension which is a fractionally faster implementation than # the alternative, more readable, implementation below # # hex = [] # for aChar in byteStr: # hex.append( "%02X " % ord( aChar ) ) # # return .join( hex ).strip()
return .join( [ "%02X " % ord( x ) for x in byteStr ] ).strip()
def HexToByte( hexStr ):
""" Convert a string hex byte values into a byte string. The Hex Byte values may or may not be space separated. """ # The list comprehension implementation is fractionally slower in this case # # hexStr = .join( hexStr.split(" ") ) # return .join( ["%c" % chr( int ( hexStr[i:i+2],16 ) ) \ # for i in range(0, len( hexStr ), 2) ] ) bytes = []
hexStr = .join( hexStr.split(" ") )
for i in range(0, len(hexStr), 2): bytes.append( chr( int (hexStr[i:i+2], 16 ) ) )
return .join( bytes )
def zero_encode(inputbuf):
newstring ="" zero = False zero_count = 0 for c in inputbuf: if c != '\0': if zero_count != 0: newstring = newstring + chr(zero_count) zero_count = 0 zero = False
newstring = newstring + c else: if zero == False: newstring = newstring + c zero = True zero_count = zero_count + 1 if zero_count != 0: newstring = newstring + chr(zero_count)
return newstring
def zero_decode(inputbuf):
newstring ="" in_zero = False for c in inputbuf: if c != '\0': if in_zero == True: zero_count = ord(c) zero_count = zero_count -1 while zero_count>0:
newstring = newstring + '\0' zero_count = zero_count -1 in_zero = False else: newstring = newstring + c else: newstring = newstring + c in_zero = True return newstring
def zero_decode_ID(inputbuf):
newstring ="" in_zero = False #print "in encode, input is", ByteToHex(inputbuf) for c in inputbuf: if c != '\0': if in_zero == True: zero_count = ord(c) zero_count = zero_count -1 while zero_count>0:
newstring = newstring + '\0' zero_count = zero_count -1 in_zero = False else: newstring = newstring + c else: newstring = newstring + c in_zero = True return newstring[:4]
</python>