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

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


点我下载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;
                }
            }
        }
    }
}
相关推荐
therese_100861 天前
客户端架构:为什么、什么时候、怎么做
设计模式·安卓·鸿蒙
shandianchengzi1 天前
【科普】安卓|安卓手机上如何简便实现Ctrl+Z(需要键盘或一台Windows电脑)
android·windows·智能手机·计算机外设·安卓·科普·记录
Gary Studio2 天前
三大核心以及关于系统工程师的问题
安卓
梦想不只是梦与想6 天前
python 中的进制
python·进制转换
韩曙亮6 天前
【Android】Android 源码查看 ( Android 源码在线查看 2026-03-30 | Android 源码下载 | Android 源码查看工具 )
android·安卓·安卓源码·aosp·android 源码·android源码查看工具·android 源码工具
欲儿7 天前
magicCamera—魔术师的 AR 卡牌应用
opencv·安卓·魔术师
Mackkill7 天前
Android-纯H5页面项目踩坑记录
安卓
凛_Lin~~9 天前
lifecycle源码解析 (版本2.5.1)
android·java·安卓·lifecycle
꯭爿꯭巎꯭10 天前
澎湃工具箱下载v3.8.9 (官网版)澎湃系统工具箱
android·智能手机·安卓
humors22111 天前
全平台日常使用的国外应用
android·ios·app·安卓·应用·国外