none
Dúvida na conversão de função para C# RRS feed

  • 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;

            }

     

     

    segunda-feira, 17 de fevereiro de 2014 23:30

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
    domingo, 23 de fevereiro de 2014 12:55

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;
    }


    Fulvio Cezar Canducci Dias

    terça-feira, 18 de fevereiro de 2014 02:29
  • Agradeço mesmo a ajuda, mais o resultado gerado não é o mesmo quando eu estou usando o a função no delphi.

    att

    terça-feira, 18 de fevereiro de 2014 03:05
  • 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 ???


    Fulvio Cezar Canducci Dias

    terça-feira, 18 de fevereiro de 2014 03:09
  • 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

    terça-feira, 18 de fevereiro de 2014 12:56
  • 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 ???


    Fulvio Cezar Canducci Dias

    Isso é verdade! Vai ser difícil ficar copiando (convertendo) código de Delphi para C#, porque são coisas completamente diferentes. Você tem que pensar da seguinte maneira: O que a função em delphi faz? Então você tenta fazer o mesmo em C# com os recursos do .Net. Esquece como ela foi escrita em Delphi. Acho que assim será mais fácil...

    Herbert Lausmann

    terça-feira, 18 de fevereiro de 2014 13:07
  • 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!


    Fulvio Cezar Canducci Dias

    terça-feira, 18 de fevereiro de 2014 13:09

  • 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!


    Fulvio Cezar Canducci Dias

    É... 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

    terça-feira, 18 de fevereiro de 2014 13:21

  • 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!


    Fulvio Cezar Canducci Dias

    É... 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

    Agora propôs um bela solução !!!

    Fulvio Cezar Canducci Dias

    terça-feira, 18 de fevereiro de 2014 13:26
  • 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

    quarta-feira, 19 de fevereiro de 2014 04:44
  • Ainda não consegui perceber o erro. Desculpe-me.

    Uma dica: Sempre que for postar código aqui no fórum use a ferramenta Inserir bloco de código.


    Herbert Lausmann

    quarta-feira, 19 de fevereiro de 2014 11:13
  • Bom dia amigo Na resposta tem um link para uma imagem Ela e a resposta final, se você verificar o código Em c# vai verificar que retorna o mesmo nome Informado. Agradeço
    quarta-feira, 19 de fevereiro de 2014 11:23
  • 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

    quarta-feira, 19 de fevereiro de 2014 12:25
  • 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.

    sexta-feira, 21 de fevereiro de 2014 16:25
  • 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
    domingo, 23 de fevereiro de 2014 12:55