除了正常进制转换,还可以输入、输出使用不同的数字符号,达成对数值进行加密的效果
使用unity开发。新建一个c#代码文件,把代码覆盖进去,再把代码文件添加给main camera即可。
csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
string injinzhifuhao = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string injinzhi = @"10";
string intext = @"12345";
string outjinzhifuhao = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string outjinzhi1 = @"2";
string outtext1 = @"";
private void OnGUI()
{
float rect_x = Screen.width * 0.1f;
float rect_y = Screen.height * 0.1f;
float rect_w = Screen.width * 0.8f;
float rect_h = Screen.height * 0.05f;
GUIStyle style_l = GUI.skin.label;
style_l.normal.textColor = Color.white;
style_l.fontSize = (int)(rect_h * 0.8);
style_l.alignment = TextAnchor.MiddleCenter;
GUIStyle style_t = GUI.skin.textField;
style_t.normal.textColor = Color.white;
style_t.fontSize = (int)(rect_h * 0.8);
GUIStyle style_b = GUI.skin.button;
style_b.fontSize = (int)(rect_h * 0.8);
style_b.alignment = TextAnchor.MiddleCenter;
GUI.Label(new Rect(rect_x, rect_y, rect_w, rect_h), @"进制符号", style_l);
rect_y += rect_h;
injinzhifuhao = GUI.TextField(new Rect(rect_x, rect_y, rect_w, rect_h), injinzhifuhao, style_t);
rect_y += rect_h;
GUI.Label(new Rect(rect_x, rect_y, rect_w, rect_h), @"输入的是几进制", style_l);
rect_y += rect_h;
injinzhi = GUI.TextField(new Rect(rect_x, rect_y, rect_w, rect_h), injinzhi, style_t);
rect_y += rect_h;
GUI.Label(new Rect(rect_x, rect_y, rect_w, rect_h), @"数值", style_l);
rect_y += rect_h;
intext = GUI.TextField(new Rect(rect_x, rect_y, rect_w, rect_h), intext, style_t);
rect_y += rect_h * 2;
bool butt = GUI.Button(new Rect(rect_x, rect_y, rect_w, rect_h), @"转换", style_b);
rect_y += rect_h * 2;
GUI.Label(new Rect(rect_x, rect_y, rect_w, rect_h), @"转换后的进制符号", style_l);
rect_y += rect_h;
outjinzhifuhao = GUI.TextField(new Rect(rect_x, rect_y, rect_w, rect_h), outjinzhifuhao, style_t);
rect_y += rect_h;
GUI.Label(new Rect(rect_x, rect_y, rect_w, rect_h), @"转换成几进制", style_l);
rect_y += rect_h;
outjinzhi1 = GUI.TextField(new Rect(rect_x, rect_y, rect_w, rect_h), outjinzhi1, style_t);
rect_y += rect_h;
GUI.Label(new Rect(rect_x, rect_y, rect_w, rect_h), @"数值", style_l);
rect_y += rect_h;
outtext1 = GUI.TextField(new Rect(rect_x, rect_y, rect_w, rect_h), outtext1, style_t);
if (butt)
{
int injinzhi_;
int outjinzhi1_;
// - - - - - - - - - - - - - - - 纠错 - - - - - - - - - - - - - - -
if (injinzhifuhao.Length <= 0) { injinzhifuhao = @"不能没有进制符号"; return; }
if (int.TryParse(injinzhi, out injinzhi_) == false) { injinzhi = @"无法识别为数字" + injinzhi; return; }
if (injinzhi_ <= 0) { injinzhi = @"必须是大于零的数字" + injinzhi; return; }
if (int.TryParse(outjinzhi1, out outjinzhi1_) == false) { outjinzhi1 = @"无法识别为数字" + outjinzhi1; return; }
if (outjinzhi1_ <= 0) { outjinzhi1 = @"必须是大于零的数字" + outjinzhi1; return; }
if (injinzhi_ > injinzhifuhao.Length) { injinzhi = @"进制符号太少,无法表示如此大的进制" + injinzhi; return; }
foreach (var item in intext)
{
bool t = false;
for (int i = 0; i < injinzhi_; i++)
{
if (injinzhifuhao[i] == item) { t = true; break; }
}
if (t == false) { intext = @"符号" + item + "不在进制范围的符号中" + intext; return; }
}
// - - - - - - - - - - - - - - - 转换 - - - - - - - - - - - - - - -
// 用int[]保存intext的每个数字;int[]的元素数量是intext.Length。
int[] jinzhinum = new int[intext.Length];
for (int i = 0; i < intext.Length; i++)
{
for (int j = 0; j < injinzhifuhao.Length; j++)
{
if (intext[i] == injinzhifuhao[j])
{
jinzhinum[i] = j;
}
}
}
// 对输入值减一,同时输出值加一。
List<int> outnum = new List<int>();
outnum.Add(0);
while (SubOne(ref jinzhinum, injinzhi_))
{
AddOne(ref outnum, outjinzhi1_);
}
// 数字转换成符号
outtext1 = @"";
for (int i = outnum.Count - 1; i >= 0; i--)
{
int t = outnum[i];
string tt = outjinzhifuhao[t].ToString();
outtext1 = tt + outtext1;
}
}
bool SubOne(ref int[] a, int jinzhi)
{
if (a[a.Length - 1] > 0) // 个位数减一
{
a[a.Length - 1]--;
return true;
}
else // 需要借位
{
for (int i = a.Length - 2; i >= 0; i--)
{
if (a[i] > 0)
{
a[i]--;
for (int j = i + 1; j <= a.Length - 1; j++)
{
a[j] = jinzhi - 1;
}
return true;
}
}
return false; // 传入的数为零,无法继续减一
}
}
void AddOne(ref List<int> a, int jinzhi)
{
a[a.Count - 1]++;
for (int i = a.Count - 1; i >= 0; i--)
{
if (a[i] == jinzhi)
{
a[i] = 0;
if (i != 0)
{
a[i - 1]++;
}
else
{
a.Insert(0, 1);
return;
}
}
else
{
return;
}
}
}
}
}