/* Copyright (C) 2014-2019 de4dot@gmail.com This file is part of dnSpy dnSpy is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. dnSpy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with dnSpy. If not, see . */ namespace dnSpy.Debugger.DotNet.Metadata { static class HexUtils { public static byte[]? ParseBytes(string hexString) { try { if (hexString.Length % 2 != 0) return null; var bytes = new byte[hexString.Length / 2]; for (int i = 0; i < hexString.Length; i += 2) { int upper = TryParseHexChar(hexString[i]); int lower = TryParseHexChar(hexString[i + 1]); if (upper < 0 || lower < 0) return null; bytes[i / 2] = (byte)((upper << 4) | lower); } return bytes; } catch { return null; } } static int TryParseHexChar(char c) { if ('0' <= c && c <= '9') return (ushort)c - (ushort)'0'; if ('a' <= c && c <= 'f') return 10 + (ushort)c - (ushort)'a'; if ('A' <= c && c <= 'F') return 10 + (ushort)c - (ushort)'A'; return -1; } } }