Swift将十六进制字符串或字符转换为整数

时间:2015-01-19 22:58:42

标签: objective-c string swift

我有一个数据源传递给我一个十六进制字符串(例如11C01),我需要将其中的每个字符转换为整数或字节值,以便我可以将它用作位字段(即执行类似的操作值| 0x01 == 0就像在旧的C风格位字段中那样)。这个语言将是Swift。

对于我的生活,我找不到一种方法将包含十六进制值的字符转换为一个整数,而不做一些奇怪的回合 - 关于放入NSData然后从那里转换它或在Objective-C类中使用C做它。只是在Swift中寻找一些东西而不是诉诸于此。

示例字符串是:11C01 我需要它来创建一个像这样的字节或整数数组:0x1,0x1,0xC,0x0,0x1。

输出应该是一个int或byte,我可以按位操作。

我将如何做到这一点?

提前致谢!

3 个答案:

答案 0 :(得分:6)

你可以这样做:

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"]"

答案 1 :(得分:3)

出于乐趣而非清晰的目的:

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]

答案 2 :(得分:1)

let int_value = UInt64("11c01", radix: 16)

然后可以将位移出

注意:确保数据类型可以保存值