Der RationalBuff kann nur 8 Byte aufnehmen, bei GPS sind es aber 24. Mit ihm kommst du also nicht an bestimmte GPS-Daten ran (GPSLongitude, GPSLatitude).
Move an sich ist völlig OK; man kann es auch über eine Pointer-Variable machen, aber dann hat man nicht die Flexibilität von TBytes. Ich meine, es ist immer noch am besten, Length zu messen, TBytes entsprechend zu dimensionieren und danach zu handeln.
Bei den Stringtypen von Typ 7 ist es nicht ganz so einfach, die können laut Spezifikation auch
Unicode sein, worauf du mit AnsiChar nicht weiter kommst. Das betrifft vor allem UserComment. Man kann die Strings ruhig bei Delphi-String belassen, muss sich dann aber um die Konvertierungen kümmern.
Ich muss jetzt zum Zug; später komme ich eventuell dazu, etwas zu posten.