gpt4 book ai didi

swift - 如何在 swift 3 中从 base64 获取字节数组?

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:27 24 4
gpt4 key购买 nike

我正在使用 swift 3 将 Android 应用程序转换为 iOS。我的问题是下一段 Java 代码:

String b64 = "KJT-AAAhtAvQ";
byte[] bytesCodigo = Base64.decode(b64, Base64.URL_SAFE);
System.out.Println(bytesCodigo.length) // 9

在 swift 中会怎样?

谢谢

最佳答案

只需从 base64 字符串创建一个 Data(Objective-C 中的 NSData)。不过请注意,标准的 Data(base64Encoded:) 没有“URL 安全”格式,但您可以创建一个格式,将“-”替换为“+”,将“_”替换为“/”在尝试转换之前:

extension Data {
init?(base64EncodedURLSafe string: String, options: Base64DecodingOptions = []) {
let string = string
.replacingOccurrences(of: "-", with: "+")
.replacingOccurrences(of: "_", with: "/")

self.init(base64Encoded: string, options: options)
}
}

然后你可以这样做:

guard let data = Data(base64EncodedURLSafe: string) else { 
// handle errors in decoding base64 string here
return
}

// use `data` here

显然,如果它不是“URL 安全”的 base64 字符串,您可以简单地执行以下操作:

guard let data = Data(base64Encoded: string) else { 
// handle errors in decoding base64 string here
return
}

// use `data` here

您询问如何获得“字节数组”:Data 有效的是,只要 Data 类型符合 RandomAccessCollection 协议(protocol),就像 Array 类型一样。所以,如果你需要它们,你有许多“数组”类型的行为,例如:

for byte in data {
// do something with `byte`, a `UInt8` value
}

let hexString = data.map { String(format: "%02x", $0) }
.joined(separator: " ")

print(hexString) // 28 94 fe 00 00 21 b4 0b d0

因此,从本质上讲,您通常不需要“字节数组”,因为 Data 提供了对您可能需要的字节的所有访问方式。此外,无论如何,大多数处理二进制数据的 Swift API 都需要 Data 类型。


如果您真的需要一个[UInt8] 数组,您可以创建一个:

let bytes = data.map { $0 }

但是当 Data 提供人们通常需要的所有数组行为时,创建一个单独的字节数组(尤其是当二进制负载很大时)通常效率很低。

关于swift - 如何在 swift 3 中从 base64 获取字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42286465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com