/// <summary>Gets the bytes for a BigEndian string.</summary> /// <param name="value">Decoded string.</param> /// <param name="maxLength">Maximum length</param> /// <param name="padTo">Pad to given length</param> /// <param name="padWith">Pad with value</param> /// <returns>Encoded data.</returns> public static byte[] SetBEString3(string value, int maxLength, int padTo = 0, ushort padWith = 0) { if (value.Length > maxLength) { value = value.Substring(0, maxLength); // Hard cap } var temp = StringConverter.SanitizeString(value) .PadRight(value.Length + 1, (char)0) // Null Terminator .PadRight(padTo, (char)padWith); return(Encoding.BigEndianUnicode.GetBytes(temp)); }
/// <summary> /// Converts a Generation 3 encoded value array to string. /// </summary> /// <param name="strdata">Byte array containing string data.</param> /// <param name="offset">Offset to read from</param> /// <param name="count">Length of data to read.</param> /// <param name="jp">Value source is Japanese font.</param> /// <returns>Decoded string.</returns> public static string GetString3(byte[] strdata, int offset, int count, bool jp) { var s = new StringBuilder(); for (int i = 0; i < count; i++) { var val = strdata[offset + i]; var c = GetG3Char(val, jp); // Convert to Unicode if (c == 0xFF) // Stop if Terminator/Invalid { break; } s.Append(c); } return(StringConverter.SanitizeString(s.ToString())); }
/// <summary> /// Converts a Generation 3 encoded value array to string. /// </summary> /// <param name="data">Byte array containing string data.</param> /// <param name="jp">Value source is Japanese font.</param> /// <returns>Decoded string.</returns> public static string GetString3(ReadOnlySpan <byte> data, bool jp) { var s = new StringBuilder(data.Length); foreach (var val in data) { var c = GetG3Char(val, jp); // Convert to Unicode if (c == Terminator) // Stop if Terminator/Invalid { break; } s.Append(c); } StringConverter.SanitizeString(s); return(s.ToString()); }
/// <summary>Gets the bytes for a Big Endian string.</summary> /// <param name="value">Decoded string.</param> /// <param name="maxLength">Maximum length of the input <see cref="value"/></param> /// <param name="padTo">Pad the input <see cref="value"/> to given length</param> /// <param name="padWith">Pad the input <see cref="value"/> with this character value</param> /// <returns>Encoded data.</returns> public static byte[] SetBEString3(string value, int maxLength, int padTo = 0, ushort padWith = 0) { if (value.Length > maxLength) { value = value.Substring(0, maxLength); // Hard cap } var sb = new StringBuilder(value); StringConverter.SanitizeString(sb); sb.Append('\0'); var delta = padTo - value.Length; if (delta > 0) { sb.Append((char)padWith, delta); } var result = sb.ToString(); return(Encoding.BigEndianUnicode.GetBytes(result)); }
/// <summary> /// Converts Generation 1 encoded data into a string. /// </summary> /// <param name="strdata">Encoded data.</param> /// <param name="offset">Offset to read from</param> /// <param name="count"></param> /// <param name="jp">Data source is Japanese.</param> /// <returns>Decoded string.</returns> public static string GetString1(byte[] strdata, int offset, int count, bool jp) { var dict = jp ? RBY2U_J : RBY2U_U; var s = new StringBuilder(); for (int i = 0; i < count; i++) { var val = strdata[offset + i]; if (!dict.TryGetValue(val, out var c)) // Take valid values { break; } if (c == '\0') // Stop if Terminator { break; } s.Append(c); } return(StringConverter.SanitizeString(s.ToString())); }
/// <summary> /// Converts Generation 1 encoded data into a string. /// </summary> /// <param name="data">Encoded data.</param> /// <param name="jp">Data source is Japanese.</param> /// <returns>Decoded string.</returns> public static string GetString1(ReadOnlySpan <byte> data, bool jp) { var dict = jp ? RBY2U_J : RBY2U_U; var s = new StringBuilder(data.Length); foreach (var val in data) { if (!dict.TryGetValue(val, out var c)) // Take valid values { break; } if (c == G1Terminator) // Stop if Terminator { break; } s.Append(c); } StringConverter.SanitizeString(s); return(s.ToString()); }