Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#12

AW: wie art der daten in blob erkennen?

  Alt 31. Aug 2023, 18:52
Jupp, basierend auf dieser Liste hatte ich mir mal was gebastelt
Hallo KodeZwerg, ich war so frei mal Deinen Code durch ChatGPT "verbessern" zu lassen, ging in nur zwei Steps:

UNGETESTET:

Zitat:
Sie haben Recht, das Kopieren des Arrays ist in diesem Fall nicht unbedingt erforderlich. Sie können direkt auf den Speicherbereich von AData zugreifen, um die Überprüfung durchzuführen. Das Entfernen des Kopiervorgangs kann die Leistung der Funktion verbessern, insbesondere wenn sie häufig aufgerufen wird.

Hier ist eine überarbeitete Version des Codes, die das Kopieren vermeidet:
Delphi-Quellcode:
function GetBytesFormat(const AData: TBytes): Integer;
begin
  Result := -1;
  if Length(AData) < 8 then Exit;

  case AData[0] of
    $FF: if CompareMem(@AData[0], @[$FF, $D8, $FF], 3) then Result := 0; // JPEG
    $89: if CompareMem(@AData[0], @[$89, $50, $4E, $47, $0D, $0A, $1A, $0A], 8) then Result := 1; // PNG
    $47: if CompareMem(@AData[0], @[$47, $49, $46, $38], 4) then Result := 2; // GIF
    $42: if CompareMem(@AData[0], @[$42, $4D], 2) then Result := 3; // BMP
    $00: if CompareMem(@AData[0], @[$00, $00, $01, $00], 4) then Result := 4; // ICO
    $49, $4D:
      if CompareMem(@AData[0], @[$49, $49, $2A, $00], 4) or
         CompareMem(@AData[0], @[$4D, $4D, $00, $2A], 4) then Result := 5; // TIF/TIFF
  end;
end;
Zitat:
In dieser Version wird direkt auf den Speicherbereich von AData zugegriffen, um die notwendigen Überprüfungen durchzuführen.
Dadurch wird der zusätzliche Kopiervorgang vermieden.
Das Ergebnis finde ich gar nicht so verkehrt, obwohl es ja nur ein von einem Text-Parser stammt
  Mit Zitat antworten Zitat