首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COpaquePointer到内存块中的任意字节

COpaquePointer到内存块中的任意字节
EN

Stack Overflow用户
提问于 2014-06-09 14:07:01
回答 1查看 635关注 0票数 3

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

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

C资料来源:

代码语言:javascript
复制
UInt8* bytes = malloc( qty_bytes_in_file );

..and,这样做之后,如何创建指向该内存的任意偏移量的指针?我需要重复地将指针移动到这个内存块中的各个地址,然后C函数会将数据写入其中。

C资料来源:

代码语言:javascript
复制
void* mData = &bytes[i];

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

C资料来源:

代码语言:javascript
复制
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;

}
EN

回答 1

Stack Overflow用户

发布于 2014-06-09 19:58:41

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

代码语言:javascript
复制
var bytes = Array<UInt8>(count: qty_bytes_in_file, repeatedValue: 0)

我认为你可以提供一个对数组的引用作为一个输入输出参数。例如:

代码语言:javascript
复制
let stream = NSInputStream(data: someNSDataObject)
let numberOfBytesRead = stream.read(&bytes, maxLength:buffer.count)

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

代码语言:javascript
复制
struct UnsafePointer<T>

…使用" memory“属性访问原始底层内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24122031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档