ConvertBinaryNumber.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using System.Linq;
  6. public class ConvertBinaryNumber
  7. {
  8. public static string[] numbers = new string[]
  9. {
  10. "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" , "g" , "h" , "i" , "j",
  11. "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" , "A" , "B" , "C" , "D",
  12. "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" , "U" , "V" , "W" , "X",
  13. "Y", "Z", "!", "#", "$", "%", "&", "'", "ザ", "ジ", "=", "~", "`", "@", "ズ", "ゼ" , "ゾ" , "ダ" , "ュ" , ":",
  14. "ド", "ヅ", "デ", "ヂ", "/", "?", "ャ", "ゲ", "ゴ", "あ", "い", "う", "え", "お", "か", "き" , "く" , "け" , "こ" , "さ",
  15. "し", "す", "せ", "そ", "た", "ち", "つ", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ" , "ふ" , "へ" , "ほ" , "ま",
  16. "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り", "る", "れ", "ろ", "わ", "を", "ん", "っ" , "ゃ" , "ゅ" , "ょ" , "ぁ",
  17. "ぃ", "ぅ", "ぇ", "ぉ", "ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ" , "ス" , "セ" , "ソ" , "タ",
  18. "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ" , "ム" , "メ" , "モ" , "ヤ",
  19. "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ヲ", "ン", "ッ", "ャ", "ュ", "ョ", "ァ", "ィ" , "ゥ" , "ェ" , "ォ" , "が",
  20. "ぎ", "ぐ", "げ", "ご", "ざ", "じ", "ず", "ぜ", "ぞ", "だ", "ぢ", "づ", "で", "ど", "ば", "び" , "ぶ" , "べ" , "ぼ" , "ぱ",
  21. "α", "β", "γ", "ァ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο" , "π" , "ρ" , "σ" , "τ",
  22. "υ", "φ", "ψ", "ω", "Ω", "Δ", "Γ", "Θ", "Λ", "Ξ", "Π", "Σ", "Φ", "ぴ", "ぷ", "ぺ" , "ぽ" , "ガ" , "ギ" , "グ",
  23. };
  24. //Convert n-decimal number to n^k-decimal number
  25. public static string NStringToNKString(string x, int n, int k)
  26. {
  27. //k letters are cut out one by one
  28. string[] SplitText = SplitClass.Split(x, k);
  29. string result = null;
  30. for (int i = 0; i < SplitText.Count(); i++)
  31. {
  32. //Convert to decimal
  33. int x_10 = NStringToInt(SplitText[i], n);
  34. //Convert to n^k decimal
  35. string x_nk = IntToNString(x_10, (int)Mathf.Pow(n, k));
  36. result += x_nk;
  37. }
  38. return result;
  39. }
  40. //Convert n^k decimal numbers to n decimal numbers
  41. public static string NKStringToNString(string x, int n, int k)
  42. {
  43. //Cutting one character at a time
  44. string[] SplitText = SplitClass.Split(x, 1);
  45. string result = null;
  46. for (int i = 0; i < SplitText.Length; i++)
  47. {
  48. //Convert to decimal
  49. int x_10 = NStringToInt(SplitText[i], n);
  50. if (x_10 == 114514)
  51. {
  52. return "114514";
  53. }
  54. //Converted to n decimal
  55. string x_n = IntToNString(x_10, n);
  56. //Cutting one character at a time
  57. string[] Split_x_n = SplitClass.Split(x_n, 1);
  58. string[] x_n_i = new string[k];
  59. //Put initial value 0
  60. for (int j = 0; j < k; j++)
  61. {
  62. x_n_i[j] = "0";
  63. }
  64. for (int j = 0; j < Split_x_n.Length; j++)
  65. {
  66. x_n_i[j + k - Split_x_n.Length] = Split_x_n[j];
  67. }
  68. for (int j = 0; j < k; j++)
  69. {
  70. result += x_n_i[j];
  71. }
  72. }
  73. return result;
  74. }
  75. //Convert decimal int to n-decimal string
  76. public static string IntToNString(int x, int n)
  77. {
  78. if (x < 0)
  79. {
  80. return null;
  81. }
  82. if (x == 0)
  83. {
  84. return "0";
  85. }
  86. var nstring = "";
  87. int r = 1; // over
  88. int q = x; // quotient
  89. // Loop until quotient reaches 0
  90. while (q > 0)
  91. {
  92. r = q % n;
  93. nstring += numbers[r];
  94. q = q / n;
  95. }
  96. return string.Join("", nstring.Reverse());
  97. }
  98. //Convert n-decimal string to decimal int
  99. public static int NStringToInt(string x, int n)
  100. {
  101. //Cutting one character at a time
  102. string[] SplitText = SplitClass.Split(x, 1);
  103. int _x = 0;
  104. for (int i = 0; i < SplitText.Reverse().Count(); i++)
  105. {
  106. string SplitedText = SplitText.Reverse().ToArray()[i];
  107. int delta = Array.IndexOf(numbers, SplitedText) * (int)Mathf.Pow(n, i);
  108. if (delta == -1)
  109. {
  110. return 114514;
  111. }
  112. _x += delta;
  113. }
  114. return _x;
  115. }
  116. }