3

I have a string:

LogoDataStr = "ABC0000"

I want to convert to ASCII bytes and the result should be:

LogoDataBy[0] = 0x41;
LogoDataBy[1] = 0x42;
LogoDataBy[2] = 0x43;
LogoDataBy[3] = 0x30;
LogoDataBy[4] = 0x30;
LogoDataBy[5] = 0x30;
LogoDataBy[6] = 0x30;

I've tried using this way:

byte[] LogoDataBy = ASCIIEncoding.ASCII.GetBytes(LogoDataStr);

But the result I get is this:

LogoDataBy[0] = 0x41;
LogoDataBy[1] = 0x42;
LogoDataBy[2] = 0x43;
LogoDataBy[3] = 0x00;
LogoDataBy[4] = 0x00;
LogoDataBy[5] = 0x00;
LogoDataBy[6] = 0x00;

Is there any wrong with my coding?

7
  • 8
    Your code exactly returns what you want. Are you sure you're looking at the right array? Commented Sep 19, 2012 at 7:53
  • I agree - I tried the code and the results are correct (i.e. the array does not contains zeroes at the locations [3]..[6] but contains the correct ASCII codes). Commented Sep 19, 2012 at 7:56
  • dtb, aren't 0 suppose to be 0x30 in hex? Commented Sep 19, 2012 at 7:56
  • Matthew Watson, which result do you mean? Commented Sep 19, 2012 at 7:57
  • 1
    @Coolguy Not to resurect a dead post, but I'm curious what the problem was; I assume you fixed it, but I'm still interested. Commented Mar 9, 2020 at 15:23

3 Answers 3

18

This code

class Program
{
    static void Main(string[] args)
    {
        byte[] LogoDataBy = ASCIIEncoding.ASCII.GetBytes("ABC000");
    }        
}

produces expected output

enter image description here

Double check your code and the value of the string before you read ASCII bytes.

Sign up to request clarification or add additional context in comments.

Comments

3

Just throwing:

Encoding.ASCII.GetBytes("ABC0000").Dump();

Into LinqPAD gives an output of (decimal):

Byte[] (7 items)
65
66
67
48
48
48
48

So I'm not sure how you're getting 0x00...

Comments

0
    class CustomAscii
    {
        private static Dictionary<char, byte> dictionary;

        static CustomAscii()
        {
            byte numcounter = 0x30;
            byte charcounter = 0x41;
            byte ucharcounter = 0x61;
            string numbers = "0123456789";
            string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string uchars = "abcdefghijklmnopqrstuvwxyz";
            dictionary = new Dictionary<char, byte>();
            foreach (char c in numbers)
            {
                dictionary.Add(c, numcounter++);
            }
            foreach (char c in chars)
            {
                dictionary.Add(c, charcounter++);
            }
            foreach (char c in uchars)
            {
                dictionary.Add(c, ucharcounter++);
            }
        }

        public static byte[] getCustomBytes(string t)
        {
            int iter = 0;
            byte[] b = new byte[t.Length];
            foreach (char c in t)
            {
                b[iter] = dictionary[c];
                //DEBUG: Console.WriteLine(b[iter++].ToString());
            }

            return b;
        }
    }

This is how i would do it. JUST IF Encoding.ASCII.GetBytes() would return wrong values.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.