私はPythonを学んでいます。事前にお詫び申し上げます。
文字列ハッシュを作成するDelphi関数があります。最初に文字列をELFハッシュ(??)に変換し、次にそれをHEX番号に変更します。
私は最初の部分をPythonで動作させています
def ELFHash(key):
hash = 0
x = 0
for i in range(len(key)):
hash = (hash << 4) + ord(key[i])
x = hash & 0xF0000000
if x != 0:
hash ^= (x >> 24)
hash &= ~x
return hash
Delphiでは、16進値に変換する追加の手順が実行されます
function BufferToHex(const Buf; BufSize : Cardinal) : string;
var
I : LongInt;
begin
Result := '';
for I := 0 to BufSize - 1 do
Result := Result + IntToHex(TByteArray(Buf)[I], 2);
end;
ここでのbufは、私が取得したelfハッシュであり、Delphi longintに格納されています。次に、BufSizeはそのlongintのDelphi sizeOf()であり、これまでのところ4を返すようです。
同等の出力を返すBufferToHex関数に似たPython関数を作成するにはどうすればよいですか?私が知る限り、Pythonのタイプは異なり、同じバイトサイズを返さない(4ではなく16を返すようです)。ctypesのものをいじったとき、私はまだ異なる数を取得していました。
アドバイスをいただければ幸いです。ありがとう。