无法为Unsafepointer Swift 3.0types转换初始化variables
嗨我转换现有的swift 2.0代码swift 3.0,但遇到转换时出现错误:
无法使用types为“(UnsafeRawPointer)”的参数列表调用types为“UnsafePointer”的初始化程序
这是我的代码:
extension Data { var hexString : String { let buf = UnsafePointer<UInt8>(bytes) // here is the error let charA = UInt8(UnicodeScalar("a").value) let char0 = UInt8(UnicodeScalar("0").value) func itoh(_ i: UInt8) -> UInt8 { return (i > 9) ? (charA + i - 10) : (char0 + i) } let p = UnsafeMutablePointer<UInt8>.allocate(capacity: count * 2) for i in 0..<count { p[i*2] = itoh((buf[i] >> 4) & 0xF) p[i*2+1] = itoh(buf[i] & 0xF) } return NSString(bytesNoCopy: p, length: count*2, encoding: String.Encoding.utf8.rawValue, freeWhenDone: true)! as String } }
在Swift 3中,您必须使用withUnsafeBytes()
来访问Data
值的原始字节。 在你的情况下:
withUnsafeBytes { (buf: UnsafePointer<UInt8>) in for i in 0..<count { p[i*2] = itoh((buf[i] >> 4) & 0xF) p[i*2+1] = itoh(buf[i] & 0xF) } }
或者,使用Data
是字节集合的事实:
for (i, byte) in self.enumerated() { p[i*2] = itoh((byte >> 4) & 0xF) p[i*2+1] = itoh(byte & 0xF) }
请注意,您的代码还有另一个问题:
NSString(..., freeWhenDone: true)
使用free()
释放内存,这意味着它必须分配malloc()
。
创buildData
值的hex表示的其他(更短,但可能效率更低)方法可以在如何将数据转换为hexstring在swift中find 。
- Swift EXC_BREAKPOINT将viewController分配给prepareForSegue中的variables
- 如何从数据库中提取用户并使用Firebase将其列在表格视图中?
- 如何通过IOS中的AFNetworking在后台上传200多张图片
- Xcode / Swift'文件名使用了两次'构build错误
- AVCaptureStillImageOutput区域select
- Firebase在Swift中检索数据
- iOS旋转videoAVAsset avfoundation
- 在Firebase SDK v3中使用数据库秘密进行身份validation?
- 如何获得每个星期四或特定月份的其他星期几?