diff --git a/ICD.Common.Utils.Tests/StringUtilsTest.cs b/ICD.Common.Utils.Tests/StringUtilsTest.cs
index 941565a..055e274 100644
--- a/ICD.Common.Utils.Tests/StringUtilsTest.cs
+++ b/ICD.Common.Utils.Tests/StringUtilsTest.cs
@@ -1,4 +1,5 @@
-using ICD.Common.Properties;
+using System.Linq;
+using ICD.Common.Properties;
using NUnit.Framework;
namespace ICD.Common.Utils.Tests
@@ -24,6 +25,21 @@ namespace ICD.Common.Utils.Tests
Assert.AreEqual("\x08\x22\x00\x00\x00\x02", output);
}
+ [TestCase("FF", new byte[] {0xFF})]
+ [TestCase("01FF", new byte[] { 0x01, 0xFF })]
+ public void HexToBytes(string value, byte[] expected)
+ {
+ byte[] bytes = StringUtils.HexToBytes(value);
+ Assert.IsTrue(bytes.SequenceEqual(expected));
+ }
+
+ [TestCase("1", 1)]
+ [TestCase("FF", 0xFF)]
+ public void HexToByte(string value, byte expected)
+ {
+ Assert.AreEqual(expected, StringUtils.HexToByte(value));
+ }
+
[TestCase("Test", "Test")]
[TestCase("test", "Test")]
[TestCase("TodayILiveInTheUSAWithSimon", "Today I Live In The USA With Simon")]
diff --git a/ICD.Common.Utils/StringUtils.cs b/ICD.Common.Utils/StringUtils.cs
index 71de8fc..5320863 100644
--- a/ICD.Common.Utils/StringUtils.cs
+++ b/ICD.Common.Utils/StringUtils.cs
@@ -175,6 +175,7 @@ namespace ICD.Common.Utils
///
///
///
+ [NotNull]
[PublicAPI]
public static byte[] ToBytes([NotNull] string input)
{
@@ -184,6 +185,43 @@ namespace ICD.Common.Utils
return Encoding.GetEncoding(28591).GetBytes(input);
}
+ ///
+ /// Converts the hex string ("01AB23") to a byte array ({1, 171, 23}).
+ ///
+ ///
+ ///
+ [NotNull]
+ [PublicAPI]
+ public static byte[] HexToBytes([NotNull] string value)
+ {
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ if (value.Length % 2 != 0)
+ throw new ArgumentException("The binary key cannot have an odd number of digits");
+
+ return value.Split(2)
+ .Select(s => HexToByte(s))
+ .ToArray();
+ }
+
+ ///
+ /// Converts the hex string ("AB") to a byte (171).
+ ///
+ ///
+ ///
+ [PublicAPI]
+ public static byte HexToByte([NotNull] string value)
+ {
+ if (value == null)
+ throw new ArgumentNullException("value");
+
+ if (value.Length == 0 || value.Length > 2)
+ throw new ArgumentOutOfRangeException("value");
+
+ return Convert.ToByte(value, 16);
+ }
+
///
/// Attempts to parse the string as an integer.
///