精华内容
下载资源
问答
  • c#十进制64进制

    2019-09-24 21:51:54
    //由于用于文件命名,所以将64位中的+转换为=,/转换为_ static char[] digits = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h...


        //由于用于文件命名,所以将64位中的+转换为=,/转换为_
         static char[] digits = {  
            '0' , '1' , '2' , '3' , '4' , '5' ,  
            '6' , '7' , '8' , '9' , 'a' , 'b' ,  
            'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,  
            'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,  
            'o' , 'p' , 'q' , 'r' , 's' , 't' ,  
            'u' , 'v' , 'w' , 'x' , 'y' , 'z' ,  
            'A' , 'B' , 'C' , 'D' , 'E' , 'F' ,  
            'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,  
            'M' , 'N' , 'O' , 'P' , 'Q' , 'R' ,  
            'S' , 'T' , 'U' , 'V' , 'W' , 'X' ,  
            'Y' , 'Z' , '=' , '_'  ,  
            };

        public static string to64(long number ,int shift) {
            
                 char[] buf = new char[64];  
            int charPos = 64;  
            int radix = 1 << shift;  
            long mask = radix - 1;  
            do {  
                buf[--charPos] = digits[(int)(number & mask)];  
                number = foo((int)number,shift);  
            } while (number != 0);  
            return new String(buf, charPos, (64 - charPos));  
        }

        public static int foo(int x, int y)
        {
            int mask = 0x7fffffff; //Integer.MAX_VALUE
            for (int i = 0; i < y; i++)
            {
                x >>= 1;
                x &= mask;
            }
            return x;
        }

    转载于:https://www.cnblogs.com/Impulse/p/3723713.html

    展开全文
  • C#基础 进制转换6/17

    2016-06-17 20:04:00
    例:二进制1011010转换十进制数为 0*20+1*21+0*22+1*23+1*24+0*25+1*26 =1+2+8+16+64 =91 十进制→二进制: 十进制数除以2,除至0时,从上往下写出即为二进制数 例:十进制91转换为二...

      二进制→十进制

    计算公式:a*20+b*21+c*22+…+m*2n-1)

    公式中a为二进制数右边第一位数,b为第二位数,以此类推

    例:二进制1011010转换为十进制数为

    0*20+1*21+0*22+1*23+1*24+0*25+1*26

    =1+2+8+16+64

    =91

      十进制→二进制

    十进制数除以2,除至0时,从上往下写出即为二进制数

    例:十进制91转换为二进制

    91除以2得出的数分别为 45  22  11  5  2  1

    所得余数分别为    1  1   0   1  1   0  1

    将余数反方向为           1011011

      十进制→八进制

    十进制数除以8,除至0时,反方向写出即为八进制数

      八进制→十进制

        

    从右第N位 8 7 6 5 4 3 2 1
    8(n-1) 87  86  85 84 83  82 81  80
    十进制下的实际数 2097152 262144 32768 4096 512 64 8 1

     

      十进制→十六进制

    十进制除以16,除至0时,反方向写出即为十六进制数

      十六进制→十进制

    计算公式:a*160+b*161+c*162+…+m*16n-1)

    以上公式中,a表示十六进制数的右边第一位的数,b表示十六进制数的右边第二位的数,c表示十六进制数的右边第三位的数,m表示十六进制数的右边第(n-1)位的数

    163 162 161 160
    4096 256 16 1

     

      二进制→八进制

    对于整数,采用从右到左每三位一组,不够三位的在其左边补齐0,每组单独转换出来,即为八进制

    例:(001     101     111     011)

               1          5        7         3

    所以1573即为所得的八进制数

      八进制→二进制

    将每位八进制由三位二进制数代替,即可完成转换

    例:(1     7       3      5)

         001  111   011  101

    所以,(1111011101)即为所得的二进制数 

      二进制→十六进制

    由于2的4次方=16,所以依照二进制与八进制的转换方法,将二进制的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始从左向右每四位一组进行转换

    例(1001       0111       0111       1001)

              9            7            7            9

    所以9779为所得数的十六进制数

     

      十六进制→二进制

    只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换

    例(8           7          6           5)

        1000     0111    0110       0101

    所以1000011101100101为所得的二进制数

     

    转载于:https://www.cnblogs.com/dreamer666/p/5594568.html

    展开全文
  • 一、自定义Base16编码原理 Base16编码跟Base64编码原理上有点不同,当然前面转换是一样的,都是是将输入的字符串根据默认编码转换成一个字节序列,而这个字节序列里面...然后将每4一组的二进制转换十进制, 最...

         

     

         一、自定义Base16编码原理

                     Base16编码跟Base64编码原理上有点不同,当然前面转换是一样的,都是是将输入的字符串根据默认编码转换成一个字节序列,而这个字节序列里面其实就是存的ASCII码,其次,将每个ASCII码转换成8位二进制,每个八位二进制拆分成4位一组的二进制,然后将每4位一组的二进制转换成十进制, 最后,根据十进制的数字索引密文下标的字符,将这些字符串联起来就是编码的字符串。

                     例子:abc

                     ASCII码:          97                  98                    99 

                       二进制:     01100001     01100010        01100011

        拆分成四位一组:     0110   0001   0110   0010   0110  0011

                      十进制:       6         1         6          2         6         3

        根据十进制索引密文下标中的字符,下面是编码的代码

        

        

            /// <summary>
            /// 自定义Base16编码
            /// </summary>
            /// <param name="str">需要编码的字符串</param>
            /// <param name="autoCode">自定义Base16编码数组,16个元素,可以为数字、字符、特殊符号,若不填,使用默认的Base16编码数组,解码与编码的Base16编码数组一样</param>
            /// <returns></returns>
            public static string AutoBase16Encrypt(string str, string[] autoCode)
            {
                string innerStr = string.Empty;
                StringBuilder strEn = new StringBuilder();
                if (autoCode == null || autoCode.Length < 16)
                    autoCode = new string[] { "a", "2", "B", "g", "E", "5", "f", "6", "C", "8", "o", "9", "Z", "p", "k", "M" };
                System.Collections.ArrayList arr = new System.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(str));
                for (int i = 0; i < arr.Count; i++)
                {
                    byte data = (byte)arr[i];
                    int v1 = data >> 4;
                    strEn.Append(autoCode[v1]);
                    int v2 = ((data & 0x0f) << 4) >> 4;
                    strEn.Append(autoCode[v2]);
                }
                return strEn.ToString();
            }

     

     

           二、自定义Base16解码原理

                      其实解码原理也很简单了,首先,将编码的字符串拆分成字符,其次,根据字符寻找到第一个和第二个字符的下标值。将第一个下标值转换成8位二进制,然后左移4位,与第二个字符的下标值合成一个字节,保存在字节数组里,最后,将保存好的字节数组根据默认编码转换成字符串。(解码我就不详加解释了)下面是解码的代码

         

            /// <summary>
            /// 自定义Base16解码
            /// </summary>
            /// <param name="str">需要解码的字符串</param>
            /// <param name="autoCode">自定义Base16编码数组,16个元素,可以为数字、字符、特殊符号,若不填,使用默认的Base16编码数组,解码与编码的Base16编码数组一样</param>
            /// <returns></returns>
            public static string AutoBase16Decrypt(string str, string[] autoCode)
            {
                int k = 0;
                string dnStr = string.Empty;
                int strLength = str.Length;
                if (autoCode == null || autoCode.Length < 16)
                    autoCode = new string[] { "a", "2", "B", "g", "E", "5", "f", "6", "C", "8", "o", "9", "Z", "p", "k", "M" };
                byte[] data = new byte[strLength / 2];
                for (int i = 0, j = 0; i < data.Length; i++, j++)
                {
                    byte s = 0;
                    int index1 = autoCode.ToList().IndexOf(str[j].ToString());
                    j += 1;
                    int index2 = autoCode.ToList().IndexOf(str[j].ToString());
                    s = (byte)(s ^ index1);
                    s = (byte)(s << 4);
                    s = (byte)(s ^ index2);
                    data[k] = s;
                    k++;
                }
                dnStr = Encoding.Default.GetString(data);
                return dnStr;
            }

         三、Base16编码数组解析

                   最后说一下这个编码数组,这个编码数组呢,是一个字符串数组,元素总数不能小于16个,当然超过16个元素,也用不上,这16个字符完全自定义,这个比较灵活,最后给大家看一个随机编码数组的函数。

                   

            /// <summary>
            /// 随机编码数组
            /// </summary>
            /// <returns></returns>
            public string[] RandomEncrypt()
            {
                string[] code = new string[16];
                Random random = new Random();
                int j = 0;
                for (int i = 0; 1 < 2; i++)
                {
                    char ch = (char)random.Next(1, 128);
                    if (code.ToList().IndexOf(ch.ToString()) < 0 && (( ch >= '0' && ch <= '9')
                        || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')))
                    {
                        code[j] = ch.ToString();
                        j++;
                    }
                    if (!Array.Exists(code, string.IsNullOrEmpty) && code.Length == 16)
                        break;
                }
                return code;
            }

     

    总结:我写的这个Base16编码解码,其实很简单了,原理也很简单,适合初学者学习体验,当然这个编码解码可以扩展,如果哪位高手或者前辈有新的思路或者想法,请告知,谢谢。

     

    转载于:https://www.cnblogs.com/WeFly/p/7815158.html

    展开全文
  • 一、自定义Base16编码原理 ...然后将每4一组的二进制转换十进制, 最后,根据十进制的数字索引密文下标的字符,将这些字符串联起来就是编码的字符串。 例子:abc  ASCII码: 97 98 99  二进制: 01100
  • C# checked和unchecked详解

    2017-09-11 13:26:03
    第一步,将所有的操作数都扩大至32位或者64位(根据操作系统的位数决定)。所以b和200(这两个值都不超过32位),首先转换成32位(假设当前操作系统是32位),然后加到一起。结果就是一个32位值(十进制300或者十六进制12C)。...

    1、对基元类型执行的许多算术运算都可能造成溢出,有如下代码:

    Byte b=100;
    b=(Byte)(b+200);
    

    简单的解读上面的代码:

    第一步,将所有的操作数都扩大至32位或者64位(根据操作系统的位数决定)。所以b和200(这两个值都不超过32位),首先转换成32位(假设当前操作系统是32位),然后加到一起。结果就是一个32位值(十进制300或者十六进制12C)。注意此时的值为一个32位的操作数,必须转型为一个byte。C#不会隐式地执行这个转型操作,这正是第二行代码需要强制转换为Byte的原因.如果不把结果值强制转换为Byte,代码如下:

    byte b = 100;
    b = b +300;

    如果将值强行转换为Byte,那么还会出现一个问题,就是值溢出的问题,Byte只能表示0~255范围的值,所以300超出了Byte的范围,值就溢出了.不同的语言以不同的方式处理溢出,C和C++不视溢出为错误,并允许值回滚.应用程序将若无其事的运行.相反,Microsoft Visual Basic总将溢出视为错误,并会在检测到溢出时抛出一个错误.

    而CLR提供了一些特殊的IL指令,允许编译器选择它认为最正确的行为。CLR有一个add指令,将作用是将两个值加到一起,但不执行溢出检查。CLR还有一个add.ovf的指令,作用是将两个值加到一起,但会在抛出异常时抛出一个System.OverflowException异常。除了用于加法运算的这两个IL指令外,CLR还为减、乘和数据转换提供了类似的IL指令,分别是sub/sub.ovf,sub/sub.ovf和conv/conv.ovf。

    也就是说C#允许程序员自己决定如何处理溢出,溢出检查默认是关闭的。因为这样能保证代码的运行效率,但是开发人员必须保证不会发生溢出,或者他们的代码能预见到这些溢出.

     

    2、控制溢出的方法

    第一种:打开/checked编译器开关.这个开关指示编译器在生成代码时,使用加、减、乘、除和转换指令的溢出检查版本也就是带.vof的版本,这样,在生成代码时,就会检查代码是否溢出.

    下面是/checked编译器开关的打开方式:

    第二种:就是用checked和unchecked关键字来控制溢出的检查与否,这体现的C#溢出检查的灵活性.

    下面是一个在/checked编译器开关打开的情况下,使用unchecked关键字强制不检查unchecked包裹的代码的溢出问题,代码如下:

    UInt32 a = unchecked((UInt32)(-1));
    Console.WriteLine(a); //一个很大的数

    下面在/checked编译器开关关闭的情况下,使用checked关键字检查其包裹的代码的溢出问题,代码如下:

    byte b = 100;
    b =checked((Byte)(b +300)); //溢出错误
    Console.WriteLine(b);

     

    3、checked和unchecked语句

    除了上面的checked和unchecked关键字外,checked和unchecked还可以是语句,它们造成一个块中的表达式就进行/不进行溢出检查.代码如下:

    checked
    {
         byte b = 100;
         b += 200;//在checked语句块内,可以直接使用+=操作符,编译器自动会把值转换为byte,前提200必须在byte范围内
         Console.WriteLine(b);
    }

     

    4、关于基元类型进行算术操作产生溢出的建议

    a、在应用程序能够容忍checked运算造成的性能损失的情况下,尽可能的打开/checked编译器开关,保证程序的正常运行

    b、尽量使用有符号整数(Int32,Int64),少使用无符号整数(UInt32,UInt64)

    c、将不希望发生overflowException的代码块作用于checked关键字下,并捕获overflowException,并即时从异常中恢复.

    d、c的反例,unchecked的用法.

     

    展开全文
  • ARP(Address Resolution Protocol) 即 地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。...①dest:访问的目标IP地址,既然获取本机网卡地址,写本机IP即可 这个地址比较特殊,必须从十进制点分地址转换成32...
  • C#微软培训资料

    2014-01-22 14:10:17
    7.3 赋值操作符和赋值表达式.64 7.4 关系操作符和关系表达式.65 <<page 2>> page begin==================== 7.5 逻辑操作符和逻辑表达式.68 7.6 运 算 .69 7.7 其它特殊操作符 .72 7.8 小 结 ....
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    7.3 赋值操作符和赋值表达式.64 7.4 关系操作符和关系表达式.65 <<page 2>> page begin==================== 7.5 逻辑操作符和逻辑表达式.68 7.6 运 算 .69 7.7 其它特殊操作符 .72 7.8 小 结 ....
  • c# 加密和解密相关代码

    热门讨论 2011-09-06 11:04:59
    果为二进制值11000,该值转换十进制为24,所以得到的加密结果为24。而解密过程也很简单,只是将加密 结果24与加密数字15 进行“异或”运算,将24 转换为二进制值11000,将15 转换为二进制值1111,进行“异 或”...
  • 字符串是 Unicode 字符序列 8 有符号整型 16 有符号整型 32 有符号整型 64 有符号整型 示例 object o = null; 范围 string sbyte short int long string s = "hello"; sbyte val = 12; short val = 12; int...
  • 实例052 开发一个进制转换器 66 3.4 日期时间格式的数据处理 67 实例053 动态获得系统当前日期和时间 67 实例054 手动设置系统日期时间 69 实例055 根据生日自动计算员工年龄 70 实例056 根据年份判断十二生肖 71 ...
  •  实例052 开发一个进制转换器 66 3.4 日期时间格式的数据处理 67  实例053 动态获得系统当前日期和时间 67  实例054 手动设置系统日期时间 69  实例055 根据生日自动计算员工年龄 70  实例056 根据年份...
  • asp.net知识库

    2015-06-18 08:45:45
    多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. ...
  • 而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

64位转换c#十进制

c# 订阅