二进制
00000000 10000000 00010000 00001100 00000001 00000000转10进制
0   128    16    12       1        0再把这6个10进制数分别转化为6个char字符,最后用base64 将char转为8个字符:手动转换结果 AIAQ DAEA
代码:
        string strRet = "";        //6个10进制数
        int[] intTen = new int[6];        //总长度 48bit = 6byte
        char[] intChar = new char[6]; //{ 0, 128, 16, 12, 1, 0 };        for (int i = 0; i < 6; i++)
        {
            intTen[i] = int.Parse(SG_TwoToTen(long.Parse(s_customer.Substring(i * 8, 8))).ToString());            //intChar[i] = (char)intTen[i];
            intChar[i] = Convert.ToChar(intTen[i]);            //strRet += " " + intTen[i];
        }        //strRet += "_";        strRet += Convert.ToBase64String(Encoding.Default.GetBytes(intChar));最后 结果AD8QDAEA与手动转换的结果不同!分析原因 10000000 转换成十进制 128 再转char 后signed char 范围-128~~128 有越界嫌隙求解决办法!

解决方案 »

  1.   

    打错了,signed char  范围-128~~127 
      

  2.   


    static void Main(string[] args)
    {
        byte[] data = new byte[] { 0, 128, 16, 12, 1, 0 };
        string result = Convert.ToBase64String(data, 0, data.Length);
        Console.WriteLine(result);
        Console.ReadKey();
    }
    结果:
    AIAQDAEA
      

  3.   

    不要想当然....NET的字符和非unicode语言的字符是两码事...在.NET中每个字符(Char)都是unicode字符,都由两到三个字节组成...