Example #1
0
        /// <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));
        }
Example #2
0
        /// <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()));
        }
Example #3
0
        /// <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());
        }
Example #4
0
        /// <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));
        }
Example #5
0
        /// <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()));
        }
Example #6
0
        /// <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());
        }