2018-07-10 Swift 16进制数字字符串转为10进制数字字符串

近来有个比较头疼的问题,有个列表要请求俩接口,比较奇怪的是这俩接口返回的值不一样,这个没关系,我可以分别只取所需放到Model中。比较奇葩的是其中一个接口返回的都是十进制的数字字符串,另一个全部是16进制字符串,然后就开始各种Google,发现这方面东西好少啊,找到一个方法改进了一下,记录下来,方便下次使用。

直接上代码 请注意,传入的必须为完整的十六进制,即为 0x开头的十六进制字符串 ,传入任意的十六进制字符串,如果有需要可以根据自己业务场景的具体需求来进一步改写或者改进一下。以下代码的环境为 swift4及以后。

    func changeValue(eStr:String) -> String{
        var fStr:String
        if eStr.hasPrefix("0x") {
            let start = eStr.index(eStr.startIndex, offsetBy: 2);
            let str1 = String(eStr[start...])
            fStr = str1.uppercased()
        }else{
            fStr = eStr.uppercased()
        }
        let str1 = String(eStr[start...])
        let fStr = str1.uppercased()
        var sum = 0
        for i in fStr.utf8 {
            sum = sum * 16 + Int(i) - 48 
            if i >= 65 {                 
                sum -= 7
            }
        }
        return String(sum)
    }

你可能感兴趣的:(2018-07-10 Swift 16进制数字字符串转为10进制数字字符串)