Also,
im Grunde sind alle Probleme behoben. Byte.join setzt einfach nur einen String zusammen und setzt "" als Delimiter. Genau da lag das Problem. Das hab ich überlesen. Ich habe also einen inkorrekten string gehashed.
shl 32 versetzt die bytes nach links um einen Uint64 erhalten. Das klappt soweit. Ich muss mich mehr mit den Typen wie int,uint,dword auseinandersetzen. Da hab ich deutlich nachhole Bedarf.
Gelöst hab ich das nun wie oben im Beispiel von TiGü beschrieben.
Code:
function TForm1.HashIt(PathWithQuotesAndNameString : string) : string;
var
//Hash: IdHashCRC.TIdHashCRC32;
HashedValue: DWord;
top111: UInt64;
Hex : string;
begin
result := 'NO HASH';
//PathWithQuotesAndNameString := '"C:\Program Files\Games\Fifa 14\fifa14.exe"FIFA 14';
CalcStringCRC32(PathWithQuotesAndNameString, HashedValue);
top111 := HashedValue or $80000000;
top111 := top111 shl 32 or $02000000;
result := IntToStr(top111);
end;
// Ergibt im Beispiel result = 10849726566762545152
Code ist hier in FreePascal so lauffähig und funktioniert.
Danke TiGü
Ps. In XE3 nutze ich das Firemonkey Framework. Könnte da der Fehler in IntToStr(top111) mit den negativen Werten liegen?