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
的幂。对了,在这之前需要先判断第一位是否是负号,如果是的话,做一个记号哈~
大家如果想用的话,可以写进String
的extension
里,可以如下使用:
var input36 = "1a"
var result10 = input36.convert36to10()
println(result10)
//1 * 36 ^ 1 + 10
//outputs 46
大家如果有更好的方法,请留言告诉我,毕竟我对swift
也不是特别熟悉。