我正在做一个窗体应用程序是Visual C#。我有一个文本框,用户必须输入一个数字和一个大写字母,例如“9D”。字符串文字到字节
我需要做的就是把那封信到一个字节数组作为一个字节......所以在我的字节数组它会:
array[index] = 0x9D
我知道,文本框类表示9D作为一个字符串。我很困惑如何使它成为一个字面字节(9D)并将其粘贴在数组中。
新的.NET。所以任何帮助将不胜感激。我查看了System.Convert类,并没有看到任何我可以使用的东西。
我正在做一个窗体应用程序是Visual C#。我有一个文本框,用户必须输入一个数字和一个大写字母,例如“9D”。字符串文字到字节
我需要做的就是把那封信到一个字节数组作为一个字节......所以在我的字节数组它会:
array[index] = 0x9D
我知道,文本框类表示9D作为一个字符串。我很困惑如何使它成为一个字面字节(9D)并将其粘贴在数组中。
新的.NET。所以任何帮助将不胜感激。我查看了System.Convert类,并没有看到任何我可以使用的东西。
使用Byte.Parse(string, NumberStyles)
:
byte b = Byte.Parse(text, NumberStyles.HexNumber);
或者Byte.TryParse(string, NumberStyles, IFormatProvider, out Byte)
以更加妥善地处理无效的输入。
使用Byte.Parse
将字符串解析为Byte
。
array[index] = Byte.Parse("9D", NumberStyles.AllowHexSpecifier);
注意,具有前缀0x
会导致解析失败,所以你可能想,如果它存在剥离出来。
谢谢!这个解决方案也有效。 – brazc0re
如果你想让它做得更快一点,并允许在数字前面加'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;
我假设你要正确对待0x9D拥有157是否正确? –
是的,这是正确的。 – brazc0re
您可以使用[System.Convert.ToByte](http://msdn.microsoft.com/en-us/library/c7xhf79k.aspx)方法,指定16作为您的基地将十六进制字符串转换为字节。 – pstrjds