using System; namespace NHSE.Injection { public static class Decoder { private static bool IsNum(char c) => (uint)(c - '0') <= 9; private static bool IsHexUpper(char c) => (uint)(c - 'A') <= 5; public static byte[] ConvertHexByteStringToBytes(byte[] bytes) { var dest = new byte[bytes.Length / 2]; for (int i = 0; i < dest.Length; i++) { int ofs = i * 2; var _0 = (char)bytes[ofs + 0]; var _1 = (char)bytes[ofs + 1]; dest[i] = DecodeTuple(_0, _1); } return dest; } private static byte DecodeTuple(char _0, char _1) { byte result; if (IsNum(_0)) result = (byte)((_0 - '0') << 4); else if (IsHexUpper(_0)) result = (byte)((_0 - 'A' + 10) << 4); else throw new ArgumentOutOfRangeException(nameof(_0)); if (IsNum(_1)) result |= (byte)(_1 - '0'); else if (IsHexUpper(_1)) result |= (byte)(_1 - 'A' + 10); else throw new ArgumentOutOfRangeException(nameof(_1)); return result; } public static byte[] StringToByteArray(string hex) { int NumberChars = hex.Length; byte[] bytes = new byte[NumberChars / 2]; for (int i = 0; i < NumberChars; i += 2) bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); return bytes; } } }