¿Cómo convertir datos a UnsafePointer <UInt8>?
Aug 25 2020
En Swift, quiero pasar un búfer de datos (con nombre data) de tipo Dataa una función C (con nombre do_something) que toma un puntero de tipo UnsafePointer<UInt8>.
¿Es correcto el siguiente ejemplo de código? Y si es así, en este caso, ¿está bien usar en assumingMemoryBound(to:)lugar de bindMemory(to:capacity:)?
data.withUnsafeBytes { (unsafeBytes) in
let bytes = unsafeBytes.baseAddress!.assumingMemoryBound(to: UInt8.self)
do_something(bytes, unsafeBytes.count)
}
Respuestas
2 MartinR Aug 25 2020 at 02:21
La forma correcta es usar bindMemory():
data.withUnsafeBytes { (unsafeBytes) in
let bytes = unsafeBytes.bindMemory(to: UInt8.self).baseAddress!
do_something(bytes, unsafeBytes.count)
}
assumingMemoryBound() solo debe usarse si la memoria ya está vinculada al tipo especificado.
Algunos recursos sobre este tema:
- Guía de migración de UnsafeRawPointer
- API UnsafeRawPointer