Swift 从 UnsafeMutablePointer <Int8>获取数据



我有一个如下所示的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!

相关内容

  • 没有找到相关文章

最新更新