Click here to Skip to main content
14,664,409 members
Rate this:
Please Sign up or sign in to vote.
See more:
I am trying to send commands to a machine

The machine accepts the packet with a byte array...

I need to build a form that will allow the user to enter the command in char format and then convert it to a byte array for example

I can send the machine

byte[] packet = 
{
((byte) (0x02)),
((byte) (0x05)),
((byte) (0xFF)),

};


I need the user to be able to input for example "0x02 0x07 0x03 0xFF"
and the string from the textbox.text be converted into a byte array with the for 4 byte values that represent the ansi format

I tried without success:

byte[] packet =
{
((byte) (string1)),
((byte) (string2)),
((byte) (string3)),


OP's Answer moved to here:
tried to google it already and frustrating that I can't find anything.
if I use the code from the above link, it interprets each digit and letter with a value
for the example below the byte array had 14 items. I need to get the 3 values. I would probably deliminate the string by spaces and then get the values for each one
In this case
0x02= 2
0xFF = 255
0x03 = 3
or a way that I can get the string and convert the literal string "0x02" and add it to to a byte array with its byte value

System.Text.Encoding enc = System.Text.Encoding.ASCII;
byte[] myByteArray = enc.GetBytes("0x02 0xFF 0x03");
Posted
Updated 16-May-11 11:16am
v3
Comments
yesotaso 16-May-11 16:00pm
   
I see plus plus everywhere :)
Keith Barrow 16-May-11 16:27pm
   
That's nothing, I see dead pointers. :)
yesotaso 16-May-11 16:36pm
   
I simply cannot find words to express how much I rofl having read that Mr. Barrow. Seriously, nice one :)
fjdiewornncalwe 16-May-11 17:15pm
   
I spy with my little eye something that is...
Seriously, though. Look at John's answer.
yesotaso 16-May-11 17:25pm
   
I respectfully agree with Mr. Simmons. On the other hand, to get things working sometimes it takes little more than just googles.
fjdiewornncalwe 16-May-11 18:22pm
   
It would be very easy for us more experienced devs to just pull out the detailed answer from google and put it here for the OP to absorb, but the OP will not learn how to search for things or formulate search arguments. That is why I prefer to put google search links up sometimes so that they learn these things. That being said, cheers to you for contributing.

Rate this:
Please Sign up or sign in to vote.

Solution 2

Checkout:
1- String.Split Method (Char[])[^]
2- Byte.Parse Method (String, NumberStyles)[^] (System.Globalization.NumberStyles.HexNumber for instance for Hex parsing)
3- For further practice System.BitConverter[^] which seems redundant for question but maybe usefull if you are going to use byte stuff.

Edit:
This should work for you: (2nd argument of ToByte is base of converted number)
string input = "0x02 0x07 0x03 0xFF";
            return input.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
   
v4
Comments
Albin Abel 16-May-11 19:25pm
   
Good one. My 5
yesotaso 16-May-11 20:30pm
   
Thanks.
Kim Togo 17-May-11 6:41am
   
Nice use of LINQ :-), my 5.
yesotaso 17-May-11 14:24pm
   
Thanks.
roman_s 17-May-11 10:31am
   
Works Great returns back the byte values in the bit array..

instead of using the method to return the array list I just assigned a byte array list to the string select/linq method

string input = "0x02 0x07 0x03 0xFF";
byte[] bArray = input.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();

Thanks to everyone for their help, also the links above were great to learn more about our little value type byte.
yesotaso 17-May-11 14:24pm
   
Glad to see it works for you. A little warning, do some checking on input as parsing works quite picky and use try catch block to avoid unnecessary yanking due to invalid input.
Rate this:
Please Sign up or sign in to vote.

Solution 1

http://geekswithblogs.net/TimH/archive/2005/06/27/44849.aspx[^]

Google is free, and ready for you to use.
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100