I am making a forms application is Visual C#. I have a textbox where a user must enter a number and a uppercase letter, example "9D".
What I need to do is put that letter into a byte array as a byte...so in my byte array it would:
array[index] = 0x9D
I know that the textbox class represents the 9D as a string. I am confused on how to make it into a literal byte (9D) and stick it in the array.
New to .Net so any help would be appreciated. I've looked at the System.Convert class and don't see anything I can use.
We can use String class getBytes() method to encode the string into a sequence of bytes using the platform's default charset. This method is overloaded and we can also pass Charset as argument.
Byte and byte string literals A byte literal is a single ASCII character (in the U+0000 to U+007F range) or a single escape preceded by the characters U+0062 ( b ) and U+0027 (single-quote), and followed by the character U+0027 .
But what about a string? A string is composed of: An 8-byte object header (4-byte SyncBlock and a 4-byte type descriptor)
Use Byte.Parse(string, NumberStyles)
:
byte b = Byte.Parse(text, NumberStyles.HexNumber);
Or Byte.TryParse(string, NumberStyles, IFormatProvider, out Byte)
to more gracefully handle invalid input.
If you wanted it done a little faster and to allow '0x' in front of the number you can use Convert.ToByte("0x9D", 16)
. In my limited testing, Convert.ToByte was twice as fast as Byte.Parse
You can also validate the input with a simple Regex. This way you know the string will parse before calling any method to parse or convert it.
// Checks that the string is either 2 or 4 characters and contains only valid hex
var regex = new Regex(@"^(0x)*[a-fA-F\d]{2}$")
Test code:
const int count = 100000;
var data = "9D";
var sw = new Stopwatch();
sw.Reset();
byte dest = 0;
sw.Start();
for(int i=0; i < count; ++i)
{
dest = Byte.Parse(data, NumberStyles.AllowHexSpecifier);
}
sw.Stop();
var parseTime = sw.ElapsedMilliseconds;
sw.Reset();
sw.Start();
for(int i=0; i < count; ++i)
{
dest = Convert.ToByte(data, 16);
}
sw.Stop();
var convertTime = sw.ElapsedMilliseconds;
Use Byte.Parse
to parse a string into a Byte
.
array[index] = Byte.Parse("9D", NumberStyles.AllowHexSpecifier);
Note that having the prefix 0x
will cause a parse fail, so you may want to strip it out if it exists.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With