Fórum Ajuda porfavor #412322
02/02/2012
0
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
Curtir tópico
+ 0Posts
02/02/2012
Marco Salles
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
02/02/2012
Marco Salles
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
03/02/2012
Pedro Lins
Vlw mesmo.
Tow quase chorando xD!
Gostei + 0
04/02/2012
Marco Salles
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)