Shift Confusion

Kamilche klachemin at comcast.net
Thu Feb 24 01:06:54 EST 2005


I'm trying to pack two characters into a single byte, and the shifting
in Python has me confused.

Essentially, it should be possible to use a 'packed string' format in
Python, where as long as the characters you're sending are in the ASCII
range 0 to 127, two will fit in a byte.

Here's the code. Can you tell what I'm doing wrong?

|import types
|
|def PackString(s):
|    if type(s) != types.StringType:
|        raise Exception("This routine only packs strings!")
|    l = len(s)
|    if l % 2 != 0:
|        s = s + '\0'
|        l += 1
|    chars = []
|    for i in range(0, l, 2):
|        x = ord(s[i])
|        y = ord(s[i+1])
|        chars.append(chr((y << 1) | x))
|    return ''.join(chars)
|
|def UnpackString(s):
|    if type(s) != types.StringType:
|        raise Exception("This routine only unpacks strings!")
|    l = len(s)
|    chars = []
|    for i in range(l):
|        temp = ord(s[i])
|        c = 0xf0 & temp
|        chars.append(chr(c))
|        c = 0x0f & temp
|        chars.append(chr(c))
|    return ''.join(chars)
|
|
|def main():
|    s = "Test string"
|    print s
|    packed = PackString(s)
|    print "This is the string packed:"
|    print packed
|    print "This is the string unpacked:"
|    print UnpackString(packed)
|
|main()




More information about the Python-list mailing list