字符串文本到字节

本文关键字:到字节 文本 字符串 | 更新日期: 2023-09-27 18:17:07

我正在制作一个表单应用程序是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)更优雅地处理无效输入。

如果您希望它完成得更快一点,并在数字前面允许"0x",您可以使用Convert.ToByte("0x9D", 16) .在我有限的测试中,Convert.ToByte的速度是Byte.Parse的两倍

您还可以使用简单的正则表达式验证输入。这样,您就知道字符串将在调用任何方法来解析或转换它之前进行分析。

// 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;

使用 Byte.Parse 将字符串解析为Byte

array[index] = Byte.Parse("9D", NumberStyles.AllowHexSpecifier);

请注意,0x前缀将导致解析失败,因此如果存在,您可能需要将其删除。