2016-04-21 13 views
2

Ich habe den nächsten Code in C#. Ich muss es in Delphi umwandeln, aber ich bin in Array.copy von C# stecken.Array.copy von C# nach Delphi

Vielleicht bin ich müde und sehe das Offensichtliche nicht. Meine Array-Kopierfunktion in Delphi gibt immer leere Bytes zurück.

Hier ist, was ich versuche:

C# code: 
    byte[] buffer = new byte[200]; 
    byte[] tmpArray = new byte[16]; 
    int lenToCopy = 4; 
    //fill buffer here 
    buffer=ReadBuffer(); 
    Array.Copy(buffer, 2, tmpArray, 5, lenToCopy); 

Delphi-Code:

var lenToCopy:integer; 
    temparray, buffer:TBytes; 
.... 
    begin 
    lenToCopy := 4; 
    setlength(tmpArray,16); 
    fillchar(tmpArray[0],length(tmpArray),0); 
    buffer:=GetBuffer();// buffer is ok here 
    tmpArray:=ArrayCopy(buffer, 2, tmpArray, 5, lenToCopy); //here is the problem: I get an empty tmpArray result 
    end; 

    function ArrayCopy(src:TBytes;ixsource:integer;dest:TBytes;ixdest:integer;len:integer):TBytes; 
    begin 
     SetLength(result, len+ixdest); 
     Move(src[ixsource],dest[ixdest],len); 
     result:=dest; 
    end; 
+0

SetLength (dest, len + ixdest); –

+0

Dalija Prasnikar. Vielen Dank. Es ist ein guter Vorschlag. –

Antwort

3

Was ist das?

NewArray: = Kopieren (OldArray, startIndex, Count);

Wenn Sie in die Mitte eines Arrays kopieren müssen, können Sie auch dies tun:

newArray: = Copy (TmpArray, 0, ixDest) + Copy (Buffer, 0, Len) + Copy (TmpArray, ixDest + Len, MaxInt);

Natürlich wird das nicht super performant sein, aber es wird funktionieren.

Ich bin nur von der Hüfte hier schießen ... Dies erfordert auch mindestens Delphi 10 Seattle.

+0

Vielen Dank. Es funktioniert in Delphi Xe8. –