Ajuda porfavor
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.
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
Curtidas 0
Respostas
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
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
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...
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
02/02/2012
Kra, você não sabe o quanto me ajudou.
Vlw mesmo.
Tow quase chorando xD!
Vlw mesmo.
Tow quase chorando xD!
GOSTEI 0
Marco Salles
02/02/2012
Wue bom que deu certo ..
GOSTEI 0