我正在制作一个表单应用程序是Visual C#。我有一个文本框,用户必须输入一个数字和一个大写字母,例如“9D”。
我需要做的是将该字母作为字节放入字节数组中...所以在我的字节数组中它会:
array[index] = 0x9D
我知道textbox类将9D表示为字符串。我很困惑如何将它变成文字字节(9D)并将其粘贴在数组中。
.Net的新手,所以任何帮助将不胜感激。我查看了System.Convert类,看不到任何可以使用的内容。
答案 0 :(得分:6)
使用Byte.Parse(string, NumberStyles)
:
byte b = Byte.Parse(text, NumberStyles.HexNumber);
或Byte.TryParse(string, NumberStyles, IFormatProvider, out Byte)
更优雅地处理无效输入。
答案 1 :(得分:4)
如果您希望它更快一点,并且在数字前面允许“0x”,则可以使用Convert.ToByte("0x9D", 16)
。在我的有限测试中,Convert.ToByte的速度是Byte.Parse
您还可以使用简单的Regex验证输入。这样你知道字符串将在调用任何解析或转换它的方法之前进行解析。
// 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}$")
测试代码:
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;
答案 2 :(得分:1)
使用Byte.Parse
将字符串解析为Byte
。
array[index] = Byte.Parse("9D", NumberStyles.AllowHexSpecifier);
请注意,使用前缀0x
会导致解析失败,因此您可能希望将其删除(如果存在)。