Die Größe Char
ist 1 Byte in Delphi 2007 und früher, aber ist 2 Bytes in Delphi 2009 und später. Im letzteren Fall wird der Code UTF-16-Daten in das Bytearray einfügen, aber nur die Hälfte der Zeichen kopieren.
Der Hauptfehler, den Sie machen, besteht darin, dass die Übergabe binarydata
von selbst an Move()
den Speicherort der Variablen selbst übergibt, die nur ein Zeiger auf anderen Speicher ist. Die Übergabe von binarydata[0]
übergibt stattdessen den Speicherort des ersten Elements des zugewiesenen Speichers, auf den TByteDynArray
zeigt. Das musst du stattdessen bestehen.
Ich habe auch eine Length()
Prüfung hinzugefügt, die einige Entfernungsüberprüfungsfehler vermeidet, wenn diese aktiviert sind.
procedure convertStringToTByteDynArray;
var
binaryData: TByteDynArray;
Data: String;
begin
Data := '8080100B1D472';
//Copy over string to TByteDynArray
SetLength(binaryData, Length(Data) * sizeof(Char));
if Length(Data) > 0 then
Move(Data[1], binaryData[0], Length(Data) * sizeof(Char));
end;
Alternativ:
procedure convertStringToTByteDynArray;
var
binaryData: TByteDynArray;
Data: String;
begin
Data := '8080100B1D472';
//Copy over string to TByteDynArray
SetLength(binaryData, Length(Data) * sizeof(Char));
Move(PChar(Data)^, PByte(binaryData)^, Length(binaryData));
end;
Wissen Sie, was kodieren, die Sie verwenden möchten? –