0

楽しみのために、テキスト全体をビットごとに右に回転させようとしています。つまり、すべての文字の最後のビット (lsb) が次の文字の最初のビット (msb) になり、最後の文字の最後のビットが最初の文字の最初のビットになるようにします。これが私が試したことです。

def bitwise_text_rotate(text):
    # make a list of ascii codes
    characters = [ord(a) for a in text]

    # save last character's right-most bit
    carry_bit = characters[-1] & 1

    # list of processed characters
    output = []

    for char in characters:
        print "processing", char
        last_bit = char & 1
        char = char >> 1
        mask = (carry_bit << 8) & 1
        char = char & mask
        print "appending", char
        output.append(char)
        carry_bit = last_bit

    return "".join([chr(a) for a in output])

しかし、うまくいきません。私はすべてゼロを取得しています。どうすればこれを改善できるか、またはここで何が間違っているのでしょうか?

4

2 に答える 2

1

これらの行は正しくありません:

mask = (carry_bit << 8) & 1
char = char & mask

使用する:

mask = carry_bit << 7
char = char | mask
于 2012-08-25T21:38:29.987 に答える
1

これを試して:

s = map(ord, text)
return ''.join(chr(((a&1)<<7) + (b>>1)) for a,b in zip(s[-1:] + s, s))
于 2012-08-25T21:30:18.180 に答える