DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Pedro Lins
 

País: Brasil
Estado: PE
Cidade:
Mensagens: 3
 Postado em: 2/2/2012 5:10:55 PM

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.
MARCO ANTONIO SALLES
 
 
 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1309
 Postado em: 2/2/2012 8:03:34 PM
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






 
MARCO ANTONIO SALLES
 
 
 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1309
 Postado em: 2/2/2012 8:06:30 PM
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...



 
Pedro Lins
 

País: Brasil
Estado: PE
Cidade:
Mensagens: 3
 Postado em: 3/2/2012 9:53:07 AM
Kra, você não sabe o quanto me ajudou.
Vlw mesmo.
Tow quase chorando xD!

 
MARCO ANTONIO SALLES
 
 
 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1309
 Postado em: 4/2/2012 10:05:42 AM
Wue bom que deu certo ..

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03