/// <summary> /// Converts byte array to hex string. /// </summary> /// <example> /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }); // = "000102" /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }, HexStringOptions.DashSeparated); // = "00-01-02" /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }, HexStringOptions.OXPrefixed | HexStringOptions.CommaSeparated | HexStringOptions.SpaceSeparated); // = "0x00, 0x01, 0x02" /// </example> /// <param name="byteArray"></param> /// <param name="options"></param> /// <returns></returns> public static string ToString(byte[] byteArray, HexStringOptions options = HexStringOptions.SpaceSeparated) => ToString(byteArray, 0, byteArray.Length, options);
/// <summary> /// Converts byte array to hex string. /// </summary> /// <example> /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }); // = "000102" /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }, HexStringOptions.DashSeparated); // = "00-01-02" /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }, HexStringOptions.OXPrefixed | HexStringOptions.CommaSeparated | HexStringOptions.SpaceSeparated); // = "0x00, 0x01, 0x02" /// </example> /// <param name="byteArray"></param> /// <param name="start"></param> /// <param name="length"></param> /// <param name="options"></param> /// <returns></returns> public static string ToString(byte[] byteArray, int start, int length, HexStringOptions options = HexStringOptions.SpaceSeparated) { var result = new StringBuilder(); var lineLength = length; var brokeLine = false; var line = 0; if ((options & HexStringOptions.EightNewLine) != 0) { lineLength = 8; } else if ((options & HexStringOptions.SixteenNewLine) != 0) { lineLength = 16; } if ((options & HexStringOptions.ColNumbers) != 0) { var spacerWidth = 47; if ((options & HexStringOptions.LineNumbers) != 0) { spacerWidth += 11; } if ((options & HexStringOptions.AsciiText) != 0) { spacerWidth += 19; } result.Append('-', spacerWidth); result.AppendLine(); if ((options & HexStringOptions.LineNumbers) != 0) { result.Append(' ', 11); } for (var i = 0; i < lineLength; ++i) { result.AppendFormat("{0:X2} ", i); } result.AppendLine(); result.Append('-', spacerWidth); result.AppendLine(); } for (var i = start; i < start + length; ++i) { if ((i == 0 || brokeLine) && (options & HexStringOptions.LineNumbers) != 0) { result.AppendFormat("{0:X8} ", line++ *lineLength); } if (i != 0 && !brokeLine) { if ((options & HexStringOptions.CommaSeparated) != 0) { result.Append(","); } if ((options & HexStringOptions.SpaceSeparated) != 0) { result.Append(" "); } if ((options & HexStringOptions.DashSeparated) != 0) { result.Append("-"); } } brokeLine = false; if ((options & HexStringOptions.OXPrefix) != 0) { result.Append("0x"); } if ((options & HexStringOptions.LowerCase) != 0) { result.Append(byteArray[i].ToString("x2")); } else { result.Append(byteArray[i].ToString("X2")); } if (i != 0 && i != byteArray.Length - 1) { if ((options & HexStringOptions.EightNewLine) != 0) { if (((i + 1) % 8) == 0) { brokeLine = true; } } else if ((options & HexStringOptions.SixteenNewLine) != 0) { if (((i + 1) % 16) == 0) { brokeLine = true; } } if (brokeLine) { if ((options & HexStringOptions.AsciiText) != 0) { result.Append(" "); for (var j = lineLength - 1; j >= 0; --j) { var b = byteArray[i - j]; var chr = (b > ' ' && b < '~' ? (char)b : '.'); result.Append(chr); } } result.AppendLine(); } } if (i == start + length - 1) { if ((options & HexStringOptions.AsciiText) != 0) { var remaining = 0; if ((options & HexStringOptions.EightNewLine) != 0) { remaining = (start + length) % 8; } else if ((options & HexStringOptions.SixteenNewLine) != 0) { remaining = (start + length) % 16; } if (remaining == 0) { remaining = lineLength; } for (var j = 0; j < lineLength - remaining; ++j) { result.Append(" "); if ((options & HexStringOptions.CommaSeparated) != 0) { result.Append(","); } if ((options & HexStringOptions.SpaceSeparated) != 0) { result.Append(" "); } if ((options & HexStringOptions.DashSeparated) != 0) { result.Append("-"); } } result.Append(" "); for (var j = remaining - 1; j >= 0; --j) { var b = byteArray[i - j]; var chr = (b > ' ' && b < '~' ? (char)b : '.'); result.Append(chr); } } } } return(result.ToString().TrimEnd()); }
/// <summary> /// Converts byte array to hex string. /// </summary> /// <example> /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }); // = "000102" /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }, HexStringOptions.DashSeparated); // = "00-01-02" /// Hex.ToString(new byte[] { 0x00, 0x01, 0x02 }, HexStringOptions.OXPrefixed | HexStringOptions.CommaSeparated | HexStringOptions.SpaceSeparated); // = "0x00, 0x01, 0x02" /// </example> /// <param name="byteArray"></param> /// <param name="start"></param> /// <param name="length"></param> /// <param name="options"></param> /// <returns></returns> public static string ToString(byte[] byteArray, int start, int length, HexStringOptions options = HexStringOptions.SpaceSeparated) { var result = new StringBuilder(byteArray.Length * 2); var brokeLine = false; for (var i = start; i < start + length; ++i) { if (i != 0 && !brokeLine) { if ((options & HexStringOptions.CommaSeparated) != 0) { result.Append(","); } if ((options & HexStringOptions.SpaceSeparated) != 0) { result.Append(" "); } if ((options & HexStringOptions.DashSeparated) != 0) { result.Append("-"); } } brokeLine = false; if ((options & HexStringOptions.OXPrefix) != 0) { result.Append("0x"); } if ((options & HexStringOptions.LowerCase) != 0) { result.Append(byteArray[i].ToString("x2")); } else { result.Append(byteArray[i].ToString("X2")); } if (i != 0 && i != byteArray.Length - 1) { if ((options & HexStringOptions.EightNewLine) != 0) { if (((i + 1) % 8) == 0) { Console.WriteLine(result.ToString().Replace(Environment.NewLine, "|")); result.AppendLine(); brokeLine = true; } } else if ((options & HexStringOptions.SixteenNewLine) != 0) { if (((i + 1) % 16) == 0) { result.AppendLine(); brokeLine = true; } } } } return(result.ToString().Trim()); }