指向内存块中任意字节的 COpaquePointer

标签 c pointers swift

我正在将一些代码移植到 Swift,但我对如何处理指针感到困惑。


在 Swift 中,如何以 C 函数可以访问的方式创建一个空的内存块

C 源代码:

UInt8* bytes = malloc( qty_bytes_in_file );

..并且,这样做之后,您将如何创建指向该内存任意偏移量的指针?我需要将指针反复移动到这个内存块中的不同地址,然后 C 函数将向这些地址写入数据。

C 源代码:

void* mData = &bytes[i];

这是我开始使用的 C 代码的缩写版本,因此您可以在上下文中看到这两行:

C 源代码:

UInt8* bytes = malloc( qty_bytes_in_file ); // Swift equivalent?

while ( !err ) {

    AudioBufferList buffer_list = new_buffer_list();

    buffer_list.mBuffers[0].mData = &bytes[i]; // Swift equivalent?

    // each iteration, ExtAudioFileRead fills 
    // in a portion of buffer_list's '.mData':
    err = ExtAudioFileRead(
        audio_file,
        &qty_frames_requested,
        &buffer_list
    );

    i += foo;

}

最佳答案

对于第一个问题,我只是制作一个字节值数组:

var bytes = Array<UInt8>(count: qty_bytes_in_file, repeatedValue: 0)

而且我认为您可以提供对该数组的引用作为输入输出参数。例如:

let stream = NSInputStream(data: someNSDataObject)
let numberOfBytesRead = stream.read(&bytes, maxLength:buffer.count)

Swift 中还有一个可用的包装器……

struct UnsafePointer<T>

... 具有“内存”属性以获取原始底层内存。

关于指向内存块中任意字节的 COpaquePointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24122031/

相关文章:

c - 将 float 放入二维数组中

c - JNI 将 Char* 二维数组传递给 JAVA 代码

python - 当 Numpy/Scipy 指针被复制到局部变量时会发生什么?

ios - 如何更新 slider 的最大值?

swift - Segues 和 UIScrollView

Swift:总是在 inout 上复制?

c - fprint 无法打印由函数返回的指针引用的串联字符串

python - 发送到 Citrix 应用程序时在 Python 脚本中模拟硬件按键(SendKeys 不起作用)

c - Linux线程C服务器

c - malloc 返回类型转换困惑