From 3f4b9a8547c60021b26986e8e971b4f61317a8e5 Mon Sep 17 00:00:00 2001 From: bird_egop Date: Sun, 13 Apr 2025 17:07:09 +0300 Subject: [PATCH] Optimized HexStringToByteArray method using spans for better performance --- .../RawFromFileDisassemblyTests.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/X86DisassemblerTests/RawFromFileDisassemblyTests.cs b/X86DisassemblerTests/RawFromFileDisassemblyTests.cs index f25a133..5104a2a 100644 --- a/X86DisassemblerTests/RawFromFileDisassemblyTests.cs +++ b/X86DisassemblerTests/RawFromFileDisassemblyTests.cs @@ -125,15 +125,22 @@ public class RawFromFileDisassemblyTests(ITestOutputHelper output) /// The byte array private static byte[] HexStringToByteArray(string hex) { - // Remove any non-hex characters + // Remove any non-hex characters if present + hex = hex.Replace(" ", "").Replace("-", ""); // Create a byte array byte[] bytes = new byte[hex.Length / 2]; - // Convert each pair of hex characters to a byte - for (int i = 0; i < hex.Length; i += 2) + // Convert each pair of hex characters to a byte using spans for better performance + ReadOnlySpan hexSpan = hex.AsSpan(); + + for (int i = 0; i < hexSpan.Length; i += 2) { - bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); + // Parse two characters at a time using spans + if (!byte.TryParse(hexSpan.Slice(i, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out bytes[i / 2])) + { + throw new FormatException($"Invalid hex string at position {i}: {hexSpan.Slice(i, 2).ToString()}"); + } } return bytes;