Swift

Swift 中将十六进制字符串转化成十进制数值

2018-04-28  本文已影响0人  BennyLoo

开发中可能有这种需求:

服务器给了一个表示16进制数的字符串:“8040000”,我们用计算机转换一下知道它的实际意思是一个10进制值——134479872,最终我们的目的是转化成十进制数便于计算和显示。而在程序中,我们只能通过代码实现这个转换过程。

一开始,我的方法是将每一个字符拆分出来,按位计算值再累加,过程繁琐且代码不好看。

后找到一种快速简洁的方式:

        let a = Scanner.init(string: resArr.last!)
        var b:UInt32 = 0
        if withUnsafeMutablePointer(to: &b, {
              a.scanHexInt32($0)
        }){
         print(b)
        }

解释: 首先想到使用 Scanner 做载体浏览,然后发现 Scanner有一个a.scanHexInt32方法,大概描述是找到载体中的16进制内容,转化成Int32数值然后放入传入的指针中。 withUnsafeMutablePointer是获取对象的指针的方式,并允许在闭包内对指针进行修改(这里我们修改了变量b的值),结果返回一个 Bool 值,代表操作是否成功。最终,我们获取的十进制值在b的地址中了。

运行:
//134479872

上一篇 下一篇

猜你喜欢

热点阅读