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

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


点我下载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;
                }
            }
        }
    }
}
相关推荐
我命由我1234520 小时前
Android Cordova 开发 - Cordova 快速入门(Cordova 环境配置、Cordova 第一个应用程序)
android·开发语言·前端框架·android studio·h5·安卓·android-studio
百锦再2 天前
SQLiteDatabase 增删改查(CRUD)详细操作
android·xml·java·ide·android studio·安卓
百锦再4 天前
Android Drawable 目录下的 XML 图形文件详解
android·xml·java·app·手机·安卓
百锦再4 天前
Android ImageButton 使用详解
android·java·app·安卓·studio·mobile
百锦再7 天前
Android Studio 实现自定义全局悬浮按钮
android·java·ide·app·android studio·安卓
百锦再8 天前
Android ImageView 使用详解
android·java·app·手机·安卓·studio
百锦再9 天前
Android Studio 日志系统详解
android·java·ide·app·android studio·安卓·idea
Superxpang10 天前
JavaScript `new Date()` 方法移动端 `兼容 ios`,ios环境new Date()返回NaN
开发语言·前端·javascript·ios·typescript·安卓
limit007510 天前
免费下载地图切片数据以及通过CesiumEarth在Windows和安卓本地浏览
低代码·3d·arcgis·web3·安卓
梁辰兴17 天前
数据结构实验3.1:顺序栈的基本操作与进制转换
数据结构·进制转换·顺序栈