开发中可能有这种需求:
服务器给了一个表示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