字符串文字到字节

时间:2011-12-08 18:04:05

标签: c# visual-c#-express-2010

我正在制作一个表单应用程序是Visual C#。我有一个文本框,用户必须输入一个数字和一个大写字母,例如“9D”。

我需要做的是将该字母作为字节放入字节数组中...所以在我的字节数组中它会:

array[index] = 0x9D

我知道textbox类将9D表示为字符串。我很困惑如何将它变成文字字节(9D)并将其粘贴在数组中。

.Net的新手,所以任何帮助将不胜感激。我查看了System.Convert类,看不到任何可以使用的内容。

3 个答案:

答案 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会导致解析失败,因此您可能希望将其删除(如果存在)。