swift 快速转换十六进制字符串或字符为整数

yqyhoc1h  于 2022-12-22  发布在  Swift
关注(0)|答案(3)|浏览(206)

我有一个数据源,它向我传递了一个十六进制字符串(如11C01),我需要将其中的每个字符转换为整数或字节值,以便将其用作位字段(例如,执行值之类的操作|0x01 == 0,就像你在旧的C风格的位域中那样)。
我这辈子都找不到一种方法来把一个包含十六进制值的字符转换成整数,除非我做一些奇怪的迂回,把它放入NSData,然后从那里转换它,或者在Objective-C类中使用C来做。
示例字符串如下所示:11C01我需要它来创建一个字节或整数数组,如下所示:0x1,0x1,0xC,0x0,0x1。
输出应该是一个int或byte,我可以对它们进行按位操作。
我该怎么做呢?
先谢了!

s5a0g9ez

s5a0g9ez1#

编辑/更新:
Swift 5或更高版本可以使用字符属性hexDigitValue:

let hexaString = "11C01"

let integers = hexaString.compactMap(\.hexDigitValue)
let bytes = integers.map(UInt8.init)
let hexaArray = hexaString.map { "0x" + String($0) }

print(integers)  // "[1, 1, 12, 0, 1]"
print(bytes)  // "[1, 1, 12, 0, 1]"
print(hexaArray)  // "["0x1", "0x1", "0xC", "0x0", "0x1"]\n"

要将每2个字符转换为一个字节(十六进制转换为字节):
x一个一个一个一个x一个一个二个一个x一个一个三个一个

dly7yett

dly7yett2#

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

然后可以将位移出
注意:确保数据类型可以保存值

ghhkc1vu

ghhkc1vu3#

为了好玩而不是为了清楚起见:

let hex_string = "11C01"

let result = hex_string.utf8.map() {
   $0 & 0xf + $0 >> 6 | ($0 & 0x40) >> 3
}
// result: UInt8 array: [1, 1, 12, 0, 1]

相关问题