0

I have a textbox on a form where a person types in a byte array into in the format shown below.

My question is how can I then convert the string array produced into a byte array of the same values?

so this would be entered into the text box :

0x11, 0x01, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0x75, 0x6D, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

the following code then splits it and converts it to a byte array

string text = txtChecksumText.Text;
        string[] parts = text.Split(new string[] { ", " }, StringSplitOptions.None);
        byte[] bytes = new byte[parts.Length];

        for (int i = 0; i < parts.Length; i++)
        {
            bytes[i] = Convert.ToByte(parts[i], 16); // this isn't working as expected
            txtResponse.Text += Environment.NewLine + "     " + i + " = " + parts[i] + " = " + bytes[i].ToString() ;
        }

and the response to show it isn't working

 0 = 0x11 = 17
 1 = 0x01 = 1
 2 = 0x49 = 73
 3 = 0x4D = 77
 4 = 0x41 = 65
 5 = 0x47 = 71
 6 = 0x45 = 69
 7 = 0x31 = 49
 8 = 0x00 = 0
 9 = 0x00 = 0
 10 = 0x00 = 0
 11 = 0x00 = 0
 12 = 0x00 = 0
 13 = 0x00 = 0
 14 = 0x00 = 0
 15 = 0x00 = 0
 16 = 0x00 = 0
 17 = 0x00 = 0
 18 = 0x00 = 0
 19 = 0x00 = 0
 20 = 0x00 = 0
 21 = 0x00 = 0
 22 = 0x00 = 0
 23 = 0x01 = 1
 24 = 0x53 = 83
 25 = 0x75 = 117
 26 = 0x6D = 109
 27 = 0x6D = 109
 28 = 0x61 = 97
 29 = 0x72 = 114
 30 = 0x79 = 121
 31 = 0x00 = 0
 32 = 0x00 = 0
 33 = 0x00 = 0
 34 = 0x00 = 0
 35 = 0x00 = 0
 36 = 0x00 = 0
 37 = 0x00 = 0
 38 = 0x00 = 0
 39 = 0x00 = 0
 40 = 0x00 = 0
 41 = 0x00 = 0
 42 = 0x00 = 0
 43 = 0x00 = 0
 44 = 0x00 = 0
 45 = 0x00 = 0
 46 = 0x00 = 0
 47 = 0x00 = 0
 48 = 0x00 = 0
 49 = 0x00 = 0
 50 = 0x00 = 0
 51 = 0x00 = 0
 52 = 0x00 = 0
 53 = 0x00 = 0
 54 = 0x00 = 0
 55 = 0x00 = 0

Just to be clear, the 0x11 should come back as a byte 11 not byte 17, same with all the others I'm not trying to convert to decimal i'm trying to convert the string of literal bytes to a byte array for check-sum creation

9
  • Sorry for asking, but what aren't working? It seems to be working fine as far as I can see. Commented May 16, 2012 at 9:42
  • Is the problem that for example 0x45 gets converted to 69? That is because 0x45 (45 hexadecimal is in fact 69 in decimal) Commented May 16, 2012 at 9:43
  • the 0x11 should come back as a byte 11 not byte 17, same with all the others I'm not trying to convert to decimal i'm trying to convert the string of literal bytes to a byte array for checksum creation Commented May 16, 2012 at 9:44
  • 1
    If you want 0x11 to be 11 not 17, what on earth do you want 0x6D to be? Commented May 16, 2012 at 9:50
  • 1
    and 0x11 is a byte of 11... in hexadecimal. The only issue here is your bytes[i].ToString() is writing the byte out in decimal... The byte itself doesn't have any concept of decimal or hex, it's in binary. Commented May 16, 2012 at 9:52

3 Answers 3

2

The bytes you're getting are just bytes; they aren't intrinsically decimal or hexadecimal.

If you want to pass the bytes to something else (for a checksum), they're fine.

Your only problem is that you're writing them to the console in decimal form - use ToString("x") if you wish to write them out in hexadecimal form for any reason.

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

Comments

1

Please do the following:

txtHexString.Text="0x11, 0x01, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0x75, 0x6D, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00";

string[] namesArray =  txtHexString.Text.Split(',');
byte[] abc= new byte [namesArray.Length];

for (int i = 0; i <= namesArray.Length - 1; i = i + 1)
        {
            abc[i] = Convert.ToByte(namesArray[i].Replace(" ", ""), 16);
        }

here, abc is the desired byte array. Now do what ever you want with abc.

Comments

0

Your code is working. Chesk this to observe different conversions and choose whatever you need:

MessageBox.Show(11.ToString());
MessageBox.Show(11.ToString("x"));
MessageBox.Show(0x11.ToString());
MessageBox.Show(0x11.ToString("x"));
MessageBox.Show(BitConverter.ToString(new byte[] { 11, 0x11, 16 }));

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.