/// <summary> /// 바이트 배열을 받아 Hex Code로 Dump해서 문자열로 만든다. /// Ultra Edit의 Hex Code Editor에 나타내는 것 처럼 /// </summary> /// <param name="data">원본 데이타</param> /// <returns> /// 야래와 같은 형식의 문자열을 반환한다.<br/> /// LINE####: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX CCCCCCCCCCCCCCCC /// </returns> public static string GetHexDumpString(this byte[] data) { if (ArrayTool.IsZeroLengthArray(data)) { return(string.Empty); } // 속도를 높히기 위해서 StringBuilder에 Initail capacity를 충분히 준다. // var result = new StringBuilder(data.Length * 6); int dataLength = data.Length; for (int r = 0; r < dataLength; r += 16) { result.AppendFormat("{0, 8:}: ", r); // Hex Code 넣기 // for (var c = 0; c < 16; c++) { if (r + c < data.Length) { result.AppendFormat("{0:X2}", data[r + c]); } else { result.Append(" "); } if (c % 4 == 3) { result.Append(" "); } } // 옆에 Char 표시 // for (var c = 0; c < 16; c++) { if (r + c < data.Length) { if (data[r + c] < 32 || data[r + c] > 255) { result.Append("."); } else { result.Append((char)data[r + c]); } } else { result.Append(" "); } } result.Append(Environment.NewLine); } return(result.ToString()); }
/// <summary> /// Byte 배열을 Hex 형식의 string으로 변환한다. /// </summary> /// <remarks>byte.AsString("X2") 를 사용한다.</remarks> /// <param name="bytes">바이트 배열</param> /// <param name="delimiter">구분자</param> /// <returns>16진수 형식의 문자열</returns> public static string GetHexStringFromBytes(this byte[] bytes, string delimiter = null) { if (ArrayTool.IsZeroLengthArray(bytes)) { return(string.Empty); } delimiter = delimiter ?? string.Empty; var result = new StringBuilder(bytes.Length * (delimiter.Length + 2)); var first = true; for (var i = 0; i < bytes.Length; i++) { if (!first) { result.Append(delimiter); } result.Append(bytes[i].ToString("X2", CultureInfo.InvariantCulture)); if (first) { first = false; } } return(result.ToString()); }