COpaquePointer到内存块中的任意字节

时间:2014-06-09 14:07:01

标签: 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;

}

1 个答案:

答案 0 :(得分:0)

对于第一个问题,我只需要创建一个字节值数组:

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>

...用&#34;记忆&#34;获取原始底层内存的属性。