我有一个如下所示的objc函数
-(char *)decrypt:(char *)crypt el:(int)el{}
当我从 swift 调用此函数时,它会返回UnsafeMutablePointer<Int8>
.现在我需要从这个指针中获取数据。输出应该是这样的字符串
"5c9f2cb88787fff26ca8a57982604460201805111017510011111111">
我尝试了下面的代码来检索值
String(validatingUTF8: pointer)
但它返回 nil。 如何从此UnsafeMutablePointer<Int8>?
中获取值
最好的猜测是数据不是有效的 UTF-8 字符串。
如果解密失败,结果很可能是无效的 UTF-8,但这只是一个诊断。
查看十六进制表示形式并验证其是否有效,或者使用非 UTF-8 值将显示为 unicode 错误符号的String(validatingUTF8: pointer)
:。
我将在这里冒昧地假设您的char *
实际上并不指向 UTF-8 数据,而是指向您希望获得十六进制表示的原始二进制数据。您可以通过以下方式执行此操作:
// You'll need to know the length of the data. If it's null-terminated,
// read through the pointer until you hit a zero byte; otherwise, use whatever
// facility the API you're using provides to get the data length.
let buffer = UnsafeBufferPointer(start: $0, count: __insert_length_here__)
// and so:
let hexString = buffer.reduce(into: "") { $0 += String(format: "%02x", $1) }
print(hexString) // ta da!