Fingerprint() Funktion mit Rückgabe eines Speicherzeigers ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
topsoft
Beiträge: 67
Registriert: 16.09.2004 11:55
Wohnort: nrw

Fingerprint() Funktion mit Rückgabe eines Speicherzeigers ?

Beitrag von topsoft »

Hallo,

die Funktion Fingerprint() gibt einen String zurück. Diesen wandele ich dann in ein Bytearray um. Beispiel:

Code: Alles auswählen

EnableExplicit
UseSHA3Fingerprint()

Procedure.i HexStr2Bin(daten.s)
  Protected anzahl.i = Len(daten)
  Protected *mem = AllocateMemory(anzahl / 2)
  If *mem And anzahl
    Protected *zmem = *mem
    Protected zdaten.i = 1
    While anzahl
      PokeA(*zmem, Val("$" + Mid(daten, zdaten, 2)))
      *zmem + 1
      zdaten + 2
      anzahl - 2
    Wend
  EndIf
  ProcedureReturn *mem
EndProcedure

Define *mem = HexStr2Bin(Fingerprint(?daten, 8, #PB_Cipher_SHA3, 512))
ShowMemoryViewer(*mem, MemorySize(*mem))
If *mem : FreeMemory(*mem) : EndIf
End

DataSection
  daten:
  Data.a $47, $11, $08, $15, $62, $87, $00, $FF
EndDataSection
Da die Funktion intern mit einem Speicherbuffer rechnet und das Ergebnis dann in einen String wandelt, frage ich mich ob man auch direkt an den Speicher heran kommt bevor der String erstellt wird?
Oder besser wie geht das Effizenter?

Gruß
Skylake QuadCore i7 6700K @4400MHz, MSI Z170A Gaming M5, 64 GB DDR4 @ 2133MHz, B: Ramdisk 32GB, C: Raid0 SATA SSD 1TB, D: Raid0 M2 SSD 1TB, E: Raid0 HDD 8TB, 28" 4K @ RTX2080, Win10 X64