Swift将十六进制字符串或字符转换为整数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift将十六进制字符串或字符转换为整数相关的知识,希望对你有一定的参考价值。
我有一个数据源,它传递给我一个十六进制字符串(如11C01),我需要将其中的每个字符转换为整数或字节值,以便我可以将它用作位字段(即执行像值| 0x01 == 0就像在旧的C风格位字段中那样)。这个语言将是Swift。
对于我的生活,我找不到一种方法将包含十六进制值的字符转换为一个整数而不做一些奇怪的循环 - 关于放入NSData然后从那里转换它或在Objective-C类中使用C进行它。只是在Swift中寻找一些东西而不是诉诸于此。
一个示例字符串是这样的:11C01我需要它来创建一个字节数组或整数,如下所示:0x1,0x1,0xC,0x0,0x1。
输出应该是一个int或byte,我可以按位操作。
我该怎么做呢?
提前致谢!
答案
你可以这样做:
let hexaString = "11C01"
let arrayOfHexa = Array(hexaString)
var result:[Int] = []
var resultString:[String] = []
for char in arrayOfHexa {
result.append( Int(strtoul((String(char)), nil, 16)))
resultString.append("0x" + String(char))
}
println(resultString) // "[0x1, 0x1, 0xC, 0x0, 0x1]"
println(result) // [1, 1, 12, 0, 1]
或仅仅为了一行的乐趣:
let resultOneLine = Array(hexaString).map{Int(strtoul(( String($0)), nil, 16))}
println(resultOneLine) // "[1, 1, 12, 0, 1]"
更新:Xcode 7.0.1•Swift 2.0
let hexaString = "11C01"
let resultArray = hexaString.characters.map{Int(strtoul(( String($0)), nil, 16))}
let resultString = resultArray.map{ String(format:"%02d", $0) }
print(resultArray) // "[1, 1, 12, 0, 1]"
print(resultString) // "["01", "01", "12", "00", "01"]"
另一答案
出于乐趣而非清晰的目的:
let hex_string = "11C01"
let result = map(hex_string.utf8) {
$0 & 0xf + $0 >> 6 | ($0 & 0x40) >> 3
}
// result: UInt8 array: [1, 1, 12, 0, 1]
另一答案
let int_value = UInt64("11c01", radix: 16)
然后可以将位移出
注意:确保数据类型可以保存值
以上是关于Swift将十六进制字符串或字符转换为整数的主要内容,如果未能解决你的问题,请参考以下文章