pythonで16進数表記された数字群を0でパディング(512bitに、16進数表記なら128桁に)した後に、32bit毎(16進数なら8桁ごと)に16分割したいです。
自分の感覚では、2進数表記した桁数がビット数でもあるので、それを求めた後に512-nビット左シフトします。
そのあとに、最初の8桁なら右に512-32桁右シフト、二番目の8桁なら512-64シフトしたのに0x00001111の排他的論理和をとり、・・・
具体的に書きます。
入力値が以下なら
0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0011223344556677
0000 1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff
0011 2233 4455 6677
と分解し
0000 1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff
0011 2233 4455 6677 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
のようにしたいです。
その後、
W[0] ~ W[15]までの配列に
W[0] = 00001111
W[1] = 22223333
・
・
・
W[15] = 00000000
のようにしたいです。
以下は自身で実装した内容ですが、パディングの時点でエラーがはかれてしまいました。
自身が作りたいのは以下のサイトと同じアルゴリズムです。
一応載せておきます。
参照
どなたかご教授願えると幸いです。
python
1x = 0x0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0011223344556677 2 3y = bin(x) 4 5x = (512 - len(y)) >> x 6 7print(x)
error
1--------------------------------------------------------------------------- 2OverflowError Traceback (most recent call last) 3<ipython-input-13-db2ffbe8a3ee> in <module>() 4 3 y = bin(x) 5 4 6----> 5 x = (512 - len(y)) >> x 7 6 8 7 print(x) 9 10OverflowError: Python int too large to convert to C ssize_t
回答1件
あなたの回答
tips
プレビュー