如何在Swift中将十六进制字符串转换为UInt8字节数组?

我有以下代码:

var encryptedByteArray: Array<UInt8>?

do {

let aes = try AES(key: "passwordpassword", iv: "drowssapdrowssap")

encryptedByteArray = try aes.encrypt(Array("ThisIsAnExample".utf8))

} catch {

fatalError("Failed to initiate aes!")

}

print(encryptedByteArray!) // Prints [224, 105, 99, 73, 119, 70, 6, 241, 181, 96, 47, 250, 108, 45, 149, 63]

let hexString = encryptedByteArray?.toHexString()

print(hexString!) // Prints e0696349774606f1b5602ffa6c2d953f

如何转换hexString回相同的UInt8字节数组?

我问的原因是因为我想通过加密的十六进制字符串与服务器通信,所以我需要将其转换回UInt8字节数组以将字符串解码为其原始格式。

回答:

您可以将六进制字符串转换回UInt8数组,该数组每两个六个字符重复一次,并使用UInt8基数16初始化程序从中初始化UInt8:


编辑/更新:

extension StringProtocol {

var hexaData: Data { .init(hexa) }

var hexaBytes: [UInt8] { .init(hexa) }

private var hexa: UnfoldSequence<UInt8, Index> {

sequence(state: startIndex) { startIndex in

guard startIndex < self.endIndex else { return nil }

let endIndex = self.index(startIndex, offsetBy: 2, limitedBy: self.endIndex) ?? self.endIndex

defer { startIndex = endIndex }

return UInt8(self[startIndex..<endIndex], radix: 16)

}

}

}


let string = "e0696349774606f1b5602ffa6c2d953f"

let data = string.hexaData // 16 bytes

let bytes = string.hexaBytes // [224, 105, 99, 73, 119, 70, 6, 241, 181, 96, 47, 250, 108, 45, 149, 63]


let hexaString = "e0696349774606f1b5602ffa6c2d953f"

let bytes = hexaString.hexa // [224, 105, 99, 73, 119, 70, 6, 241, 181, 96, 47, 250, 108, 45, 149, 63]

以上是 如何在Swift中将十六进制字符串转换为UInt8字节数组? 的全部内容, 来源链接: utcz.com/qa/424493.html

回到顶部