Array of bytes umkehren - richtig so?
Hallo.
nur um sicherzustellen, dass mein Code richtig ist, habe ich eine kurze Frage. Gegeben ist eine Datenstruktur vom Typ CERT_INFO, die von der WinAPI befüllt wird. Teil der Struktur ist SerialNumber vom Typ CRYPT_INTEGER_BLOB, das ich umkehren will/muss, weil die SerialNumber sonst gespiegelt aus CryptBinaryToString komme (wegen Zitat:
Das Umkehren mache ich derzeit so:
Delphi-Quellcode:
Funktion ReverseBytes ist von hier, nur den Datentyp der Variable Size habe ich geändert.
var
CertContext: PCCERT_CONTEXT; Lserial: LPByte; ... procedure ReverseBytes(Source, Dest: Pointer; Size: NativeUInt); begin Dest := PByte( NativeUInt(Dest) + Size - 1); while Size > 0 do begin PByte(Dest)^:= PByte(Source)^; Inc(PByte(Source)); Dec(PByte(Dest)); Dec(Size); end; end; ... GetMem(Lserial, CertContext.pCertInfo.SerialNumber.cbData); try ReverseBytes(CertContext.pCertInfo.SerialNumber.pbData, Lserial, CertContext.pCertInfo.SerialNumber.cbData); ... finally FreeMem(Lserial); end; Ist das korrekt so? Grüße Dalai |
AW: Array of bytes umkehren - richtig so?
Dies hier könnte noch etwas effizienter sein.
|
AW: Array of bytes umkehren - richtig so?
Zitat:
Grüße Klaus |
AW: Array of bytes umkehren - richtig so?
Oha, richtig :oops:
|
AW: Array of bytes umkehren - richtig so?
Zitat:
Delphi-Quellcode:
Dest := PByte(Dest) + Size - 1;
Und ich würde die Parameter gleich als PByte deklarieren, dann ist der Typecast auch nicht mehr notwendig. |
AW: Array of bytes umkehren - richtig so?
Zitat:
|
AW: Array of bytes umkehren - richtig so?
Zitat:
Zitat:
Primär geht's mir um die Frage der Korrektheit, also ausreichende Speicherreservierung, kein Lesen über die Grenzen, keine Speicherlecks und sowas, da ich bisher nie ein Array of bytes umkehren musste. Optimierungen sind sekundär. Aber wenn ich die Antworten richtig deute, liege ich wohl nicht verkehrt. Dankeschön an alle :). Grüße Dalai |
AW: Array of bytes umkehren - richtig so?
Zitat:
Delphi-Quellcode:
nicht gesetzt wurde. Lässt sich aber ändern...
{$POINTERMATH ON}
Allerdings ist das bei einem Byte-Array gleichbedeutend mit:
Delphi-Quellcode:
Da hier der index und der offset identisch sind.
Dest := PByte(Dest + Size - 1);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz