如何在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:


编辑/更新:Xcode 14•Swift 5.1

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]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Swift中将UInt8字节数组转换为字符串

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

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

如何UINT8字节数组转换为字符串的Java

在 C# 中将十六进制字符串转换为字节数组

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

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

将字节数组转换为十六进制字符串

将字节数组转换为十六进制字符串

十六进制字符串转换为字节数组

将奇数长度的Java字符串转换为十六进制字节数组

将十六进制字符串转换为字节数组

将ASCII十六进制字符串转换为字节数组

将十六进制字符串转换为字节数组

如何将普通字符串转换为等效的十六进制字节数组?

如何将字节数组转换为十六进制字符串,反之亦然?

在Java中将十六进制字节数组的字符串表示形式转换为具有非ascii字符的字符串

在Java中,如何在保持前导零的同时将字节数组转换为十六进制数字的字符串?

Java通用将字节数组转换为字符串(非十六进制,十进制)

将[十六进制]字节数组转换为Char数组或字符串类型+ Arduino

使用Java将十六进制转储的字符串表示形式转换为字节数组?

将纯文本字符串转换为十六进制样式的字节数组?

预处理程序宏,可将十六进制字符串转换为字节数组

字节数组到javascript中的十六进制字符串转换

使用 VB.NET 2015 将长十六进制字符串转换为十六进制字节数组

如何将此逻辑从 LabVIEW 转换为 C# - 十六进制字符串到字节数组并将字节数组类型转换为单个

如何在ctypes中将无符号字节数组转换为base64字符串

一个人如何学习Java?(将字节数组转换为十六进制字符串)

如何在Javascript中将十六进制字符串转换为字节并将字节转换为十六进制字符串?