小编mac*_*acu的帖子

Swift - 从UnsafePointer <UInt8>转换为String

我考虑了很多类似的问题,但仍然无法让编译器接受这个.

Socket Mobile API(在Objective-C中)将ISktScanDecodedData传递给Swift中的委托方法(数据可能是二进制的,我想这就是为什么它不作为字符串提供):

func onDecodedData(device: DeviceInfo?, DecodedData d: ISktScanDecodedData?) {
  let symbology: String = d!.Name()
  let rawData: UnsafePointer<UInt8> = d!.getData()
  let rawDataSize: UInt32 = decoded!.getDataSize()
  // want a String (UTF8 is OK) or Swifty byte array...
}
Run Code Online (Sandbox Code Playgroud)

在C#中,此代码将原始数据转换为字符串:

string s = Marshal.PtrToStringAuto(d.GetData(), d.GetDataSize());
Run Code Online (Sandbox Code Playgroud)

在斯威夫特,我可以得到UnsafeArray,但后来我卡住了:

let rawArray = UnsafeArray<UInt8>(start: rawData, length: Int(rawDataSize))
Run Code Online (Sandbox Code Playgroud)

另外我看String.fromCStringNSString.stringWithCharacters,但也不会在手上接受类型的参数.如果我可以从转换UnsafePointer<UInt8>UnsafePointer<()>,例如,那么这将是可用的(虽然我不知道如果它甚至会是安全的):

NSData(bytesNoCopy: UnsafePointer<()>, length: Int, freeWhenDone: Bool)
Run Code Online (Sandbox Code Playgroud)

是否有明显的方法来获取所有这些字符串?

type-conversion swift

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

swift ×1

type-conversion ×1