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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.