using System.Text; namespace Zerolauncher.Manager { class SpaceEncoder { const int mini_index = 48; const int max_index = 70; const int sec_index = 60; static readonly List map = [ (char)8192, (char)8194, (char)8196, (char)8197, (char)8198, (char)8199, (char)8200, (char)8201, (char)8202, (char)8239, (char)8287, (char)32 ]; public static string? Encode(string hex) { StringBuilder sb = new StringBuilder(); foreach (char c in hex) { if (mini_index > c && max_index < c) { return null; } if (c < sec_index) { sb.Append(map[c - mini_index]); } else { sb.Append(map[11]); sb.Append(map[c - sec_index]); } } return sb.ToString(); } public static string? Decode(string hex, out int counter) { StringBuilder sb = new StringBuilder(); bool double_char = false; counter = 0; foreach (char c in hex) { counter++; if (!map.Contains(c)) return null; if (c != map[11]) { int j = map.FindIndex(item => item.Equals(c)); if (double_char) { int k = j + sec_index; if (k > max_index) return null; sb.Append((char)k); double_char = false; } else sb.Append((char)(j + mini_index)); } else { if (double_char) return null; double_char = true; } } return sb.ToString(); } } }