Is there a C# equivalent of the VB.NET asc function?

Discussion in 'ASP .Net' started by Alan Silver, Jun 7, 2005.

  1. Alan Silver

    Alan Silver Guest

    Hello,

    I'm converting some old VB6 code to use with ASP.NET and have come
    unstuck with the Asc() function. This was used in the old VB6 code to
    convert a character to its ASCII numeric equivalent.

    Is there such a function available in C#? I can see that VB.NET has one,
    but I couldn't see how to get at it in C#.

    For example, if I have ...

    string str = "Hello";

    .... how would I do the following (where I have used the VB Asc()
    function in my C# pseudocode)...

    int sum = 0;
    for (int i=0; i:str.Length(); i++) {
    sum += Asc(str.Substring(i,1));
    }

    TIA
     
    Alan Silver, Jun 7, 2005
    #1
    1. Advertisements

  2. Alan Silver

    Brock Allen Guest

    I'm converting some old VB6 code to use with ASP.NET and have come
    char c = 'A';
    int val = (int)x;
     
    Brock Allen, Jun 7, 2005
    #2
    1. Advertisements

  3. Will this work?
    x = System.Convert.ToInt32(Mychar.Substring(0, 1));
     
    Steve C. Orr [MVP, MCSD], Jun 7, 2005
    #3
  4. Alan Silver

    Guest Guest

    Give this a shot

    sum += (int) str;

    Jim
     
    Guest, Jun 7, 2005
    #4
  5. Alan Silver

    Alan Silver Guest

    I'm converting some old VB6 code to use with ASP.NET and have come
    Oh, isn't that clever!!

    Can I convert back as easily? I mean the equivalent of the Chr()
    function? I'm sure it's probably as simple as another cast, but my brain
    isn't clear enough (1am after a really lousy day's work) to be sure I'm
    doing it right!!

    Also (whilst you're being so helpful), is there an equivalent of the Xor
    operator? I was using this for some encryption, but couldn't work out
    how to do it in C#. The .NET class library is so big that it's hard to
    find your way around.

    Thanks very much for the help. Any further help would be greatly
    appreciated.
     
    Alan Silver, Jun 7, 2005
    #5
  6. Alan Silver

    Alan Silver Guest

    Give this a shot


    Ooh-err, another useful tip. I'd forgotten that you can treat strings
    like char arrays. That will make life easier.

    Thanks for the tip. Please read my other reply and see if you can shed
    any light on the Xor question.

    Thanks again
     
    Alan Silver, Jun 7, 2005
    #6
  7. Alan Silver

    Guest Guest

    Yes,

    ' ' == (char) 20

    and you want ^
    eg 11110000 ^ 10101010 equals 01011010

    Sombody's in the UK writing some sort of license key/password hashing
    algorithm??!

    Jim
     
    Guest, Jun 7, 2005
    #7
  8. Alan Silver

    Alan Silver Guest

    Yes,
    Thanks!! I love the simplicity of C#. I just need to get it all in my
    head.

    It occurred to me in bed last night that the C# equivalent of Xor was
    probably an operator, not a method of a class. That explains why I
    couldn't find it in the class library. Ho hum.
    Not quite that fancy, but close. I have an old VB6/ASP application that
    encrypts some sensitive data before storing it in the database. I'm
    trying to rewrite it bit by bit in ASP.NET and am trying to convert the
    encryption/decryption routines as accurately as possible.

    To be honest, the code is quite old and not my best!! I would really
    like to re-engineer the whole thing from scratch, but there's too much
    legacy data around to allow that at the moment. I need to get the new
    system working with the old data as quickly as possible. I have the
    following inelegant and inefficient function ...

    Public Function Encode(Key As String, ByVal Str As String) As String
    Dim Tmp As String, RealKey As String, sc As String, kc As String
    Dim l As Integer, i As Integer
    Tmp = StrReverse(Key) ' save the key passed to us
    RealKey = ""
    l = Len(Tmp & Main.RealSeed)
    For i = 1 To l ' build up the full key from the seed and the passed
    key
    RealKey = RealKey & Mid(Tmp, i, 1) & Mid(Main.RealSeed, i, 1)
    Next
    Tmp = "" ' will hold the encoded string
    For i = 1 To Len(Str)
    sc = Asc(Mid(Str, i, 1))
    kc = Asc(Mid(RealKey, i, 1))
    Tmp = Tmp & Chr(sc Xor kc)
    Next
    Encode = Tmp
    End Function

    .... which I am trying to rewrite in C#. As you can see, the code is not
    something to be proud of!! I wrote it a long time ago and have learned a
    lot since then.

    By the way, if you're trying to make sense of it, Main.RealSeed refers
    to a variable in the Main from of the application that holds a seed for
    the (admittedly basic) encryption routine.

    Thanks for the help.
     
    Alan Silver, Jun 7, 2005
    #8
  9. Alan Silver

    Guest Guest

    If you're not having fun doing it (and actually a better reason...) you
    probably shouldn't be doing this yourself, as it's weak, and .NET already has
    all this stuff done for you.

    If it's one way hashing you need (like checking passwords) use MD5
    System.Security.Cryptography.MD5

    which is pretty easy
    byte[] data = new byte[DATA_SIZE];

    // This is one implementation of the abstract class MD5.
    MD5 md5 = new MD5CryptoServiceProvider();

    byte[] result = md5.ComputeHash(data);


    If you need proper 2 way encryption use something like RSA
    System.Security.Cryptography.RSACryptoServiceProvider

    admittedly it's not quite trivial, but the docs are good and there's tons of
    examples out there. Plus you wont get screwed if someone decyphers your
    "encoding" (it's not really encryption is it, its just encoding).

    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/cpguide/html/cpconcryptographyoverview.htm

    I'm by no means an encryption expert so I can't recommend an encryption
    scheme to use, but I would certainly suggest looking at this.

    Jim
     
    Guest, Jun 7, 2005
    #9
  10. Alan Silver

    Alan Silver Guest

    Jim,

    Thanks for the reply...
    I'm not having a bad time doing it, I'm just a bit pushed for time and
    would prefer to have more chance to learn all this properly.

    As far as the .NET framework's offerings, I would love to use them and
    do the job properly, but as explained, I'm working with a lot of legacy
    data that has been encrypted using the existing method. I need to make
    sure the new system can read the old data.

    At some point (when I ever get enough time, ha ha ha) I would like to
    rewrite this system from scratch. At that point, I would use whatever
    ..NET has to offer as it's bound to be more stable and easier than
    writing my own code. Unfortunately, I don't see that happening in the
    near future ;-(

    Thanks again for the reply. The info is useful anyway.
     
    Alan Silver, Jun 7, 2005
    #10
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.