【问题标题】:Hex string to UnsafePointer<Int8> swift十六进制字符串到 UnsafePointer<Int8> swift
【发布时间】:2021-08-11 11:50:51
【问题描述】:

我正在寻找一种将十六进制字符串转换为 UnsafePointer 数组的更好方法。这是我当前的代码:

let pointer: UnsafePointer<Int8>? = NSString(string: "d0c6a560de2e60b6ac55386defefdf93b0c907290c2ad1b4dbd3338186bfdc68").utf8String
// or 
let pointer: UnsafePointer<Int8>? = NSString(string: key).utf8String
let length = NSString(string: key).length
var res =  blsSecretKeySetHexStr(&sec, pointer, length)

我正在将 C++ class 移植到 Swift,并且此类方法 blsSecretKeySetHexStrblsPublicKeyGetHexStr 需要 UnsafePointerUnsafeMutablePointer 作为输入。

【问题讨论】:

  • 真正的问题是:为什么需要UnsafePointer&lt;Int8&gt;?你想解码十六进制字符串吗?
  • @MartinR 我正在将一个 C++ 类移植到 swift
  • 我建议您(在问题中)更详细地描述您实际想要做什么。
  • @MartinR 帖子已编辑。
  • 您想移植(即转换)C++ 到 Swift,还是想从 Swift 中调用 C++ 函数?

标签: swift string hex unsafe-pointers unsafemutablepointer


【解决方案1】:

您可以找到有关UnsafePointer 使用here 的有用信息。

首先,如果您想将指向字符串的指针传递给接受UnsafePointer&lt;Int8&gt; 的函数,您可以这样做:

func foo(pointer: UnsafePointer<Int8>) {
    print(pointer) // 0x0000600003478c60
    print(strlen(pointer)) // 64
}

let immutableString = "d0c6a560de2e60b6ac55386defefdf93b0c907290c2ad1b4dbd3338186bfdc68"

foo(pointer: immutableString)
// 0x0000600003478c60
// 64

let cStringPointer = immutableString.utf8CString
    .withUnsafeBufferPointer { $0 }
    .baseAddress!
foo(pointer: cStringPointer)
// 0x0000600003478c60
// 64

var cstring = immutableString.cString(using: .utf8)!
foo(pointer: &cstring)
// 0x00006000023e0950
// 64

如果您需要UnsafeMutablePointer

func bar(pointer: UnsafeMutablePointer<CChar>) {
    print(pointer)
    print(strlen(pointer))
}

let string = "d0c6a560de2e60b6ac55386defefdf93b0c907290c2ad1b4dbd3338186bfdc68"
var cstring = string.cString(using: .utf8)!
bar(pointer: &cstring)
// 0x00006000023e0950
// 64

var mutableCString = immutableString.utf8CString
let mutableCStringPointer = mutableCString
    .withUnsafeMutableBufferPointer { $0 }
    .baseAddress!
bar(pointer: cStringMutablePointer)
// 0x0000600003478c60
// 64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2014-03-07
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多