[英]convert (void *) to (SInt16 *) to Swift
我正在尝试将以下内容从Objective-C转换为Swift:
-(int)fillBuffer:(void *)buffer {
SInt16* p = (SInt16 *)buffer;
// ...
p[33] = 0
}
我已经明白(void *)
映射到UnsafeMutableRawPointer?
输入Swift。
但是,我错过了将其转换为可以进行下标操作的步骤。
到目前为止,我有这个:
func fill(buffer: UnsafeMutableRawPointer!) -> Int {
buffer[33] = 0
}
寻求反馈和建议。 提前致谢!
将void指针强制转换为类型指针
SInt16* p = (SInt16 *)buffer;
在使用assumingMemoryBound()
Swift中完成:
func fillBuffer(_ buffer: UnsafeMutableRawPointer) -> Int {
let p = buffer.assumingMemoryBound(to: Int16.self)
// ...
p[33] = 0
return 0
}
测试代码:
var i16Array = Array(repeating: Int16(99), count: 40)
print(i16Array[33]) // 99
_ = fillBuffer(&i16Array) // passes a pointer to the element storage to the function
print(i16Array[33]) // 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.