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

问题描述 投票:1回答:3

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

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

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

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

我该怎么做呢?

提前致谢!

objective-c string swift
3个回答
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"]"

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]

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

然后可以将位移出

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

© www.soinside.com 2019 - 2024. All rights reserved.