Если вы хотите, чтобы это было сделано немного быстрее, и чтобы разрешить '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;