Kevin14的博客

iOS中36进制转10进制

2015-03-15

最近在写usecubes的时候遇到一个特殊的需求,由于web端的数据保存的是36进制的,而iOS端的数据则保存的是10进制,并且36进制在swift中并没有现成的转换方法,所以我做了一个36进制对10进制的转换,这里分享一下。

先看代码:

//这里做了一个String的extension
func convert36to10() -> Int{

        var int10:Float = 0
        var negative:Float = 1
        let str36 = "0123456789abcdefghijklmnopqrstuvwxyz"
        var count:Float = Float(self.length())
        let HEX:Float = 36.0

        for c:Character in self{
            count--
            if c == Character("-"){
                negative = -1
            }else{
                let realVal = find(str36, c)!
                var realValInt:Int = distance(str36.startIndex, realVal)
                var realValFloat:Float = Float(realValInt)
                realValFloat = pow(HEX,count)*realValFloat
                int10 += realValFloat
            }
        }

        int10 *= negative

        return Int(int10);
    }

我的思路就是通过字符串的index来获得当前字符的值,顺便在循环中获取count--的值以便当作36的幂。对了,在这之前需要先判断第一位是否是负号,如果是的话,做一个记号哈~ 大家如果想用的话,可以写进Stringextension里,可以如下使用:

var input36 = "1a"
var result10 = input36.convert36to10()
println(result10) 

//1 * 36 ^ 1 + 10
//outputs 46

大家如果有更好的方法,请留言告诉我,毕竟我对swift也不是特别熟悉。