function decode(C) {        
var digi=16;        
var add= 10;        
var plus=7;        
var cha=36;        
var I = -1;        
var H = 0;       
 var B = "";        
var J = C.length;        
var G = C.charCodeAt(J - 1);        
C = C.substring(0, J - 1);        
J--;        
for (var E = 0; E < J; E++) {            
var D = parseInt(C.charAt(E), cha) - add;            
if (D >= add) {               
 D = D - plus            
}            
B += (D).toString(cha);            
if (D > H) {                
I = E;                
H = D            
}        
}        
var A = parseInt(B.substring(0, I), digi);        
var F = parseInt(B.substring(I + 1), digi);        
var L = (A + F - parseInt(G)) / 2;        
var K = (F - L) / 100000;        
L /= 100000;       
 return {            
lat: K,            
lng: L        
}}

解决方案 »

  1.   


            Temp decode(string C)
            {
                int digi = 16;
                int add = 10;
                int plus = 7;
                int cha = 36;
                int I = -1;
                int H = 0;
                string B = "";
                int J = C.Length;
                string G = C[J - 1].ToString();
                C = C.Substring(0, J - 1);
                J--;
                for (var E = 0; E < J; E++)
                {
                    var D = Convert.ToInt32(C[E].ToString(), cha) - add;
                    if (D >= add)
                    {
                        D = D - plus;
                    }
                    B += Convert.ToString(D, cha);
                    if (D > H)
                    {
                        I = E;
                        H = D;
                    }
                }
                int A = Convert.ToInt32(B.Substring(0, I), digi);
                int F = Convert.ToInt32(B.Substring(I + 1), digi);
                int L = (A + F - Convert.ToInt32(G)) / 2;
                int K = (F - L) / 100000;
                L /= 100000;
                Temp t = new Temp();
                t.lat = K;
                t.lng = L;
                return t;
            }        struct Temp
            {
                public int lat;
                public int lng;
            }
      

  2.   

    非常感谢楼上,但是有一个错误
     var D = Convert.ToInt32(C[E].ToString(), cha) - add;
    这句显示无效的基
      

  3.   

    自己调试一下,看看是不是有什么不对,比如是不是你想把字符传换成整数
    Convert.ToInt32(C[E].ToString(),   cha) 
    Convert.ToInt32这个方法只要一个参数,你为何提供2个?
      

  4.   

    var cha=36; 
    你这鸟函数要用36进制,C#没有现成的支持36进制。
    要不,你把这个赋值为16好了,应该就可以了。
      

  5.   

    10进制转2~32进制        private string toN32(int n10, int radix)
            {
                string _num = "0123456789ABCDEFGHIJKLMNOPQRSTUVWSYZ";
                int sn = n10;
                string _rul = string.Empty;
                while (sn >= radix)
                {
                    _rul = _num.Substring(sn % radix, 1) + _rul;
                    sn = sn / radix;
                }
                return _num.Substring(sn % radix, 1) + _rul;
            }
      

  6.   

    改良一下 int ConvertToInt32(char c)
    {
    if (c >= 48 && c <= 57) { return c - 48; }
    if (c >= 97 && c <= 122) { return c - 87; }
    if (c >= 65 && c <= 90) { return c - 55; }
    return 0;
    }

    string ConvertToString(int v, int fromBase)
    {
    if (fromBase < 2 || fromBase > 36) throw new ArgumentException();
    List<char> cs = new List<char>(36);
    while(v > 0)
    {
    int x = v % fromBase;
    int c = 48;
    if(x > 10){ c = 87; }
    cs.Add((char)(x + c));
    v /= fromBase;
    }
    cs.Reverse();
    return new string(cs.ToArray());
    } Temp decode(string C)
    {
    C = C.ToLower();
    int digi = 16;
    int add = 10;
    int plus = 7;
    int cha = 36;
    int I = -1;
    int H = 0;
    string B = "";
    int J = C.Length;
    string G = C[J - 1].ToString();
    C = C.Substring(0, J - 1);
    J--;
    for (var E = 0; E < J; E++)
    {
    var D = ConvertToInt32(C[E]) - add;
    if (D >= add)
    {
    D = D - plus;
    }
    B += ConvertToString(D, cha);
    if (D > H)
    {
    I = E;
    H = D;
    }
    }
    int A = Convert.ToInt32(B.Substring(0, I), digi);
    int F = Convert.ToInt32(B.Substring(I + 1), digi);
    int L = (A + F - Convert.ToInt32(G)) / 2;
    int K = (F - L) / 100000;
    L /= 100000;
    Temp t = new Temp();
    t.lat = K;
    t.lng = L;
    return t;
    } struct Temp
    {
    public int lat;
    public int lng;
    }