非对称任意进制转换器(安卓)

除了正常进制转换,还可以输入、输出使用不同的数字符号,达成对数值进行加密的效果


点我下载APK安装包

使用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;
                }
            }
        }
    }
}
相关推荐
码码哈哈0.01 天前
一个直接看央视频道的软件,可直接安装到TV
安卓
编码追梦人5 天前
安卓底层相机流的传输方式
linux·c++·安卓
事后不诸葛7 天前
新增白名单赋予应用安装权限
framework·安卓
事后不诸葛9 天前
Crash-SQLiteDiskIOException
安卓
java_t_t11 天前
安卓延迟自动点击
android·安卓·自动点击·延迟点击
arpsyalin12 天前
安卓悬浮窗应用外无法穿透事件问题
安卓
不做签到员13 天前
YOLOv8-Pose NCNN安卓部署
android·yolo·安卓·yolov8·ncnn·yolov8pose·优化部署
丫头,冲鸭!!!24 天前
安卓开发实现图像处理相关功能
图像处理·人工智能·计算机视觉·安卓