Zwar mal davon abgesehen, dass Cardinal() der richtige Typ wäre für den Typecast, aber afaik schmeisst Delphi dann eine Warnung bei der Addition von wegen Kombination von vorzeichenlosen und vorzeichenbehafteten Datentypen. Dadurch zwingt Delphi einem (leider) bei solcher Adressarithmetik zu der vorzeichenbehafteten Rechnung.
@Zacherl: Da er bei deiner Lösung immer wieder vom Pointer neu losrechnet (um i drauf zu rechnen), wäre es performanter einfacher eine lokale Variable vom Typ PByte anzulegen und dieser vor der Schleife den übergebenen Pointer zu übergeben. In der Schleife reicht dann einfach ein
Inc().