繁体   English   中英

convert(void *)to(SInt16 *)to Swift

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM