Ajuda porfavor

Delphi

02/02/2012

Boa tarde pessoal, eu sou programador C# e estou precisando converter um código criptografado de delphi para .net.
Me deparei com uma função no delphi chamada Move.

es meu problema

I: LongInt;
S: AnsiString;

begin
I:= 0;
S:= cúW;

Move(S[1], I, Length(S));

entender oque a função faz eu entendi mas o problema é que se esse bloco de código for executado assim que ele passa pela função o I assume o valor de 5765731.
Eu não entendi o porque de acontecer isso.
Alguém pode me dar uma ajudar, Preciso muito disso.

Desde já obrigado a todos.
Pedro Lins

Pedro Lins

Curtidas 0

Respostas

Marco Salles

Marco Salles

02/02/2012

Olá programado , bem vindo ao nosso pequeno mundo Delphi. Então a melhor explicação
que eu ja vi sobre o MOVE vem do link

http://www.delphibasics.co.uk/RTL.asp?Name=Move

So que o Delphi dele , o Caracter é Um Byte hj a resposta a simulação será
diferente

Mas vamos ao seu exemplo

S:= cúW;

Move(S[1], I, Length(S));

Em primeiro Lugar vamos aos detalhes
Length(S) = 4
Sizeof(S)=3

A biografia do Delphi manda utilizar o SizeOf

http://docwiki.embarcadero.com/VCL/en/System.Move

procedure Move(const Source; var Dest; Count: Integer);

use the global SizeOf function (Delphi) or the sizeof operator (C++) to determine the count.

Chega de blablabla e vamos lá .. né ??

perceba que
c corresponde em decimal a 99 que em binário é : 01100011
ú corresponde em decimal a 250 que em binário é : 11111010
W corresponde em decimal a 87 que em binário é : 01010111

Como Count = Length(S) = 4 mas o Sizeof(S) =3 voce moverá para o I
todo o Binário , logo o valor de I será

I = 01010111 11111010 01100011 que em decimal corresponde ao 5765731


Agora imagine o seguinte comando

Move(S[1], I, Length(S));

Logo O valor de I será

I = 01010111 11111010 01100011





GOSTEI 0
Marco Salles

Marco Salles

02/02/2012

Apertei o enviar sem querer.. Então

Agora imagine o seguinte comando

Move(S[1], I, 2);

Logo O valor de I será

I = 11111010 01100011 que em decimal corresponde a 64099


e se a instrução fosse

Move(S[1], I, 1);

I = 01100011 que em decimal corresponde a 99


espero ter sido útil...


GOSTEI 0
Pedro Lins

Pedro Lins

02/02/2012

Kra, você não sabe o quanto me ajudou.
Vlw mesmo.
Tow quase chorando xD!
GOSTEI 0
Marco Salles

Marco Salles

02/02/2012

Wue bom que deu certo ..
GOSTEI 0
POSTAR