あなたが何をするか、コードを知りたい場合は、それはNB (2 ** left - 1)
は((1<<left)-1)
可能性があり、あなたに
b64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"
b64p = "="
ret = ""
s2 = """TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=""".replace(b64p, "")
left = 0
for i in range(0, len(s2)):
if left == 0:
left = 6
else:
value1 = b64s.index(s2[i - 1]) & (2 ** left - 1)
value2 = b64s.index(s2[i]) >> (left - 2)
value = (value1 << (8 - left)) | value2
print(left, chr(value), bin(ord(s2[i-1])).rjust(10), bin(ord(s2[i])).rjust(10), bin(value1).rjust(10), bin(value2).rjust(10), bin(value).rjust(10))
ret += chr(value)
left -= 2
print(ret)
を伝えています。これは我々がs2[i-1]
からいくつかの右端のビットをしたいビットマスク(左= 3、その後、0111は結果のバイナリである)
は、s2[i]
の残りのビットはで使用されるのs2[i]
からいくつかの一番左のビット、それらを組み合わせただろう次の繰り返し
あなたのコメントに応じて、各文字は8ビットではなく6ビットを表します。したがって、8ビットを表すには2文字を組み合わせる必要があります。左 - = 2は8-6が2であるためです。各文字が4ビットの場合、左に4を設定します。&は4を減算し、左に== 0トリガーを2回繰り返します。各文字のペアは正確に1バイトにマップされるためです。左右にスライドする量が8になっているだけです。各ビットを1回だけ読み込む必要があるため、スライディングが繰り返されるたびにビットインデックスをスライドさせて読む必要があります。ビット値をインデックスするiの一部として残っていると想像してみてください。左に0をつけると、現在の文字からすべて6を取る必要があります。& 2から次は、なぜ左に6を設定するのですか?&次の文字に進む次の文字に進む& 2最後の反復から6を取った)
あなたの*具体的な質問がここにあることを明確にすることはできますか?それが立っているので、私はそれがスタックオーバーフローに適しているとは思わない。 – BlackVegetable
変数value1、value2、valueに対して行われた操作を理解できませんでした。 プログラムの目的は、base64でエンコードされた文字列をデコードすることです。 – papabiceps