Usuário com melhor resposta
Dúvida na conversão de função para C#

Pergunta
-
Amigos, estou tendo uma dificuldade para fazer uma conversão de uma função, já pesquisei sobre mais até o momento não conseguir fazer.
Agradeço se alguém puder ajudar na solução.
Tenho esta função em Delphi:
//function Encrypt( S: String ): String;
//var
// i, Len: Integer;
// Ret: String;
//begin
// Len := Length( S );
// Ret := Copy( S, 1, Len );
// for i := 1 to Len do begin
// Ret[i] := Chr( not Ord( Ret[i] ) );
// end;
// Result := Ret;
//end;
Em C# eu tenho:
protected void Page_Load(object sender, EventArgs e)
{
Encrypt("teste");
}
public static string Encrypt(string S)
{
Int16 i, Len = 0;
string Ret = "";
Len = (Int16)S.Length; //quantidade de letras
Ret = string.Copy(S).Trim(); //nome digitado
for(i = 1; i <= Len; i++)
{
Ret[i] = Chr( not Ord( Ret[i] ) ); //problema aqui
};
return Ret;
}
//método chr
public char Chr(int codigo)
{
return (char)codigo;
}
Respostas
-
Agradeço imensamente a todos pela ajuda. A resposta final ficou assim:
Atenciosamente
Agradeço imensamente a todos pela ajuda. A resposta final ficou assim: public string Encrypt(string s) { // Encoding: 1252 – West European Latin Encoding enconding = Encoding.GetEncoding(1252); int len = s.Length; // quantidade de letras byte[] byteArray = new byte[len]; for (int i = 0; i < len; i++) { byteArray[i] = ((byte)~((s[i]))); }; return enconding.GetString(byteArray); } //método chr public char Chr(int codigo) { return (char)codigo; }
- Sugerido como Resposta Herbert Lausmann domingo, 23 de fevereiro de 2014 13:03
- Marcado como Resposta Giovani Cr segunda-feira, 24 de fevereiro de 2014 10:31
Todas as Respostas
-
Amigos, estou tendo uma dificuldade para fazer uma conversão de uma função, já pesquisei sobre mais até o momento não conseguir fazer.
Agradeço se alguém puder ajudar na solução.
Tenho esta função em Delphi:
//function Encrypt( S: String ): String;
//var
// i, Len: Integer;
// Ret: String;
//begin
// Len := Length( S );
// Ret := Copy( S, 1, Len );
// for i := 1 to Len do begin
// Ret[i] := Chr( not Ord( Ret[i] ) );
// end;
// Result := Ret;
//end;
Em C# eu tenho:
protected void Page_Load(object sender, EventArgs e)
{
Encrypt("teste");
}
public static string Encrypt(string S)
{
Int16 i, Len = 0;
string Ret = "";
Len = (Int16)S.Length; //quantidade de letras
Ret = string.Copy(S).Trim(); //nome digitado
for(i = 1; i <= Len; i++)
{
Ret[i] = Chr( not Ord( Ret[i] ) ); //problema aqui
};
return Ret;
}
//método chr
public char Chr(int codigo)
{
return (char)codigo;
}
Pelo que eu entendi seria isso:
public static string Encrypt(string S) { Int16 i, Len = 0; string Ret = ""; Len = (Int16)S.Length; //quantidade de letras Ret = string.Copy(S).Trim(); //nome digitado String RetNew = string.Empty; for(i = 0; i < Len; i++) { RetNew += ((int)((char)Ret[i])); }; return RetNew; }
- Sugerido como Resposta Fulvio Cezar Canducci Dias terça-feira, 18 de fevereiro de 2014 02:29
-
-
-
Olá,
A única coisa que percebi de errado no código que vocês converteram foi: Ret = string.Copy(S).Trim();
Olhando isso deu pra constatar que a função Copy( S, 1, Len ); é equivalente a Substring(Int32, Int32); no .Net.
Veja se ajuda:
public static string Encrypt(string S) { int i, Len = 0; string Ret = ""; Len = S.Length; //quantidade de letras Ret = string.Substring(1, Len - 1); String RetNew = string.Empty; for(i = 0; i < Len; i++) { RetNew += ((int)((char)Ret[i])); }; return RetNew; }
Herbert Lausmann
-
Agradeço mesmo a ajuda, mais o resultado gerado não é o mesmo quando eu estou usando o a função no delphi.
att
Sinceramente eu não sabia o resultado, mas, também são coisas diferentes ...
Não é melhor se adequar ao C# do que ficar copiando Delphi ???
Herbert Lausmann
-
Olá,
A única coisa que percebi de errado no código que vocês converteram foi: Ret = string.Copy(S).Trim();
Olhando isso deu pra constatar que a função Copy( S, 1, Len ); é equivalente a Substring(Int32, Int32); no .Net.
Veja se ajuda:
public static string Encrypt(string S) { int i, Len = 0; string Ret = ""; Len = S.Length; //quantidade de letras Ret = string.Substring(1, Len - 1); String RetNew = string.Empty; for(i = 0; i < Len; i++) { RetNew += ((int)((char)Ret[i])); }; return RetNew; }
Herbert Lausmann
Não tem nada de errado Herbert Lausmann, a única coisa que essa rotina é feita em Delphi e não tem converte-la para C#, porque, precisa-se saber como seria feita essa rotina .... !!!!
Desculpa mas, você ta enganado!
-
Não tem nada de errado Herbert Lausmann, a única coisa que essa rotina é feita em Delphi e não tem converte-la para C#, porque, precisa-se saber como seria feita essa rotina .... !!!!
Desculpa mas, você ta enganado!
É... eu acho que é melhor a gente fazer o seguinte:
Itasouza, o que essa função deve fazer? O que ela deve retornar?
Sabendo-se o que ela deve fazer e o que deve retornar, fica fácil para nós ajudarmos.
Herbert Lausmann
-
Não tem nada de errado Herbert Lausmann, a única coisa que essa rotina é feita em Delphi e não tem converte-la para C#, porque, precisa-se saber como seria feita essa rotina .... !!!!
Desculpa mas, você ta enganado!
É... eu acho que é melhor a gente fazer o seguinte:
Itasouza, o que essa função deve fazer? O que ela deve retornar?
Sabendo-se o que ela deve fazer e o que deve retornar, fica fácil para nós ajudarmos.
Herbert Lausmann
-
Amigo, veja se poder me ajudar,
Eu tenho este código:
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(Encrypt("ramati"));
}
public string Encrypt(string S)
{
int i, Len = 0;
string Ret = "";
Len = S.Length; // quantidade de letras
Ret = S.Substring(1, Len - 1); // nome digitado
for (i = 0; i < Len; i++)
{
Ret = Ret + Chr((byte)(~((int)(S[i]))));
};
return Ret;
}
//método chr
public char Chr(int codigo)
{
MessageBox.Show(codigo.ToString()); // Para testes
return (char)codigo;
}
Ele me retorna quase tudo igual ao Delphi, menos a ultima informação. veja que ele traz: 141, 158, 146,158,139,150,amati agora no delphi : 141,158,146,158,139,150,
http://arquivo.devmedia.com.br/forum/imagem/156581-20140219-013836.png
agradeço
-
-
-
Ah, acho que agora entendi.
Dei uma modificada no seu código:
public string Encrypt(string S) { int i, Len = 0; string Ret = ""; Len = S.Length; // quantidade de letras Ret = S.Substring(1, Len - 1); // Talvez esta linha esteja errada... for (i = 0; i < Len; i++) { Ret = Ret + char.ConvertFromUtf32(~((int)S[i])); }; return Ret; }
Herbert Lausmann
- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 19 de fevereiro de 2014 12:26
-
Bom dia Itasouza,
Alguma novidade?
Att,
Giovani Cruzara – Microsoft Contingent Staff
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
Msdn Community Support
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde. -
Agradeço imensamente a todos pela ajuda. A resposta final ficou assim:
Atenciosamente
Agradeço imensamente a todos pela ajuda. A resposta final ficou assim: public string Encrypt(string s) { // Encoding: 1252 – West European Latin Encoding enconding = Encoding.GetEncoding(1252); int len = s.Length; // quantidade de letras byte[] byteArray = new byte[len]; for (int i = 0; i < len; i++) { byteArray[i] = ((byte)~((s[i]))); }; return enconding.GetString(byteArray); } //método chr public char Chr(int codigo) { return (char)codigo; }
- Sugerido como Resposta Herbert Lausmann domingo, 23 de fevereiro de 2014 13:03
- Marcado como Resposta Giovani Cr segunda-feira, 24 de fevereiro de 2014 10:31