From e7bdcdfca5b90634b21c5193b3c66c0b3f7e0ea7 Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Mon, 22 Mar 2021 15:30:25 -0400 Subject: [PATCH] feat: Adding methods for converting hex strings to byte arrays --- ICD.Common.Utils.Tests/StringUtilsTest.cs | 18 ++++++++++- ICD.Common.Utils/StringUtils.cs | 38 +++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) 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. ///