• base64 小测试:


    base64工作原理:
    Base64是MIME邮件中常用的编码方式之一。它的主要思想是将输入的字符串或数据编码成只含有{‘A‘-‘Z‘, ‘a‘-‘z‘,
    ‘0‘-‘9‘, ‘+‘, ‘/‘}这64个可打印字符的串,故称为“Base64”。
    Base64编码的方法是,将输入数据流每次取6 bit,用此6 bit的值(0-63)作为索引去查表,输出相应字符。这样,每3个字节将
    编码为4个字符(3×8 → 4×6);不满4个字符的以‘=‘填充。

    c#把字符串转换成64位方法

    先转换 2进制流:

    可以根据系统自带的方法:

     string name = "abcdefg";
                byte[] bytes=Encoding.Default.GetBytes(name);//获取字节流
                StringBuilder ll = new StringBuilder();//可变字符串
                for (int i = 0; i < name.Length; i++)//循环转换2进制流
                {
                    string data1 = Convert.ToString(bytes[i],2) .PadLeft(8, '0');
                    ll.Append(data1);
                }
                string result = ll.ToString();

     结果:01100001011000100110001101100100011001010110011001100111

    也可以自己写:

    下面这个没有做循环所以只能先把字符串转出ascii然后输入;

     public static string to2(int value)
            {
                //先取得2进制位
                int yushu;//所得余数
                StringBuilder s = new StringBuilder("");
                while (true)
                {
                    if (value <= 1)
                    {
                        s.Append(value);
                        break;
                    }
                    yushu = value % 2;
                    s.Append(yushu);
                    value = (int)(value / 2);//把商赋值给value
                }
                //排序
                int changdu = s.Length;
                string result = "";
                int eightchang = (changdu + 3) / 4;
                for (int i = changdu; i > 0; i--)
                {
                    result += s[i - 1];
                }
                return result.PadLeft(eightchang * 4, '0');//不足当前长度左边用0补齐
            }

    运行结果: to('a')=01100001

    得到2进制流然后进行base64转换:

    方法有点冗余.懂方法就行了;

     public static string to64(string value)
            {
                int buqi = (value.Length + 5) / 6;//判断长度并对字符串进行6位补齐 要为6的倍数
                value = value.PadRight(6 * buqi, '0');
                StringBuilder s64 = new StringBuilder("");
                while (true)
                {
                    if (value.Length == 0)
                    {
                        break;
                    }
                    string jiequ = value.Substring(0, 6);
                    char zhengshu =base64(Convert.ToInt32(jiequ, 2));//装换成10进制并求值
                    if (zhengshu == '!')
                    {
                        Console.WriteLine("异常二进制串"+jiequ);
                    }
                    s64.Append(zhengshu);
                    value = value.Substring(6);
                }
                if (buqi <= 4)
                {
                    return s64.ToString().PadRight(4, '=');//用=号在右边补齐
                }
                else
                {
                    buqi = (int)(buqi + 5) / 6;//base64位的都是4的倍数.所以要适当位数=补齐操作;
                    return s64.ToString().PadRight(buqi * 6, '=');
                }
            }
            //对64进行相应解码:下面是对照ascii码解码的,也可以全部写出了解码;
            public static char base64(int value)
            {
                if (value <= 25)
                {
                    return (Char)(value + 65);
                }
    
                else if (25 < value && value <= 51)
                {
                    return (Char)(value + 71);
                }
                else if (51 < value && value < 61)
                {
                    return (char)(value - 3);
                }
                else if (value == 62)
                {
                    return '+';
                }
                else if (value == 63)
                {
                    return '/';
                }
                else
                {
                    return '!';
                }
            }

     

    base64位的字符对照表:

  • 相关阅读:
    Leetcode 1414. 和为 K 的最少斐波那契数字数目(贪心)
    A ConvNet for the 2020论文阅读笔记
    Leetcode 957. N 天后的牢房(暴力)
    洛谷P1879 [USACO06NOV]Corn Fields G(状压DP)
    CF1553D Backspace(双指针)
    26
    37
    36
    3.4
    3.3
  • 原文地址:https://www.cnblogs.com/niubi007/p/6226388.html
Copyright © 2020-2023  润新知