private static string InternalByteArrayToString(byte[] buffer, int offset, int count) { if (count == 0) { return(string.Empty); } if (count > int.MaxValue / 2) { throw new ArgumentOutOfRangeException(nameof(count), FormattableString.Invariant($"The specified length exceeds the maximum value of {int.MaxValue / 2}.")); } var result = new char[2 * count]; var resultIndex = 0; var limit = offset + count; for (; offset < limit; offset++) { result[resultIndex++] = CharUtils.HexValueToChar(buffer[offset] >> 4); result[resultIndex++] = CharUtils.HexValueToChar(buffer[offset] & 0xF); } return(new string(result)); }
public static void EscapeString(string s, int startIndex, int limit, StringBuilder sb) { for (; startIndex < limit; startIndex++) { var c = s[startIndex]; switch (c) { case '\0': sb.Append("\\0"); break; case '\a': sb.Append("\\a"); break; case '\b': sb.Append("\\b"); break; case '\t': sb.Append("\\t"); break; case '\n': sb.Append("\\n"); break; case '\v': sb.Append("\\v"); break; case '\f': sb.Append("\\f"); break; case '\r': sb.Append("\\r"); break; case '"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; default: if (CharUtils.RequiresEscaping(c)) { sb.Append("\\u"); sb.Append(CharUtils.HexValueToChar((c >> 12) & 0xF)); sb.Append(CharUtils.HexValueToChar((c >> 8) & 0xF)); sb.Append(CharUtils.HexValueToChar((c >> 4) & 0xF)); sb.Append(CharUtils.HexValueToChar((c >> 0) & 0xF)); continue; } sb.Append(c); break; } } }