gpt4 book ai didi

objective-c - 对字节缓冲区进行位移

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:02 25 4
gpt4 key购买 nike

我有一个二进制数据缓冲区:

SInt16 *buffer = (SInt16 *)calloc(1024,sizeof(SInt16));

我想处理这个缓冲区前面的一大块数据(例如 50 个数据点)

for(int i = 0; i < 50 ; ++i){
process_data(buffer[i])
}

一旦数据被处理,我就不再需要它了,所以我想丢弃它并将我的指针 *buffer 放在第 51 个数据点。但是,我仍然需要缓冲区指向其中有 1024 个位置的缓冲区。为此,我想我会做一些转变来做到这一点,因为它实现了我的目标,而且据我所知,速度很快(我处于高优先级线程中)。但是我不清楚位移位如何处理字节数组。

首先,如果我想移动数组以使 *buffer 指向以前包含在 buffer[50] 中的值,那么在 C( Objective-C )中是左移还是右移?

其次,如果我移动缓冲区,它会移动所有 1024 个数据点还是只会移动缓冲区 [0] 处的一个 SInt16 数据点?

这里的想法是,处理器将从缓冲区的开头读取 block ,然后向另一个线程上的文件读取器发出信号,将新数据附加到缓冲区的末尾。如果处理了 50 个数据点,则丢弃这 50 个点,文件读取器将 50 个新数据点追加到字节缓冲区的末尾。

最佳答案

这与bitshift无关。您需要转换整数大小(以字节为单位)。您可以使用 memmove 或等价物。

OTOH 你的设计肯定有缺陷。移动数据所花费的时间与其剩余部分成正比。因此,如果您只处理了 50 个第一个元素,然后移动了 1024-50 个剩余元素 - 这是无效的。

你最好重新设计你的代码,这样你只移动指针,你仍然有(在另一个变量中)指向分配开始的指针

关于objective-c - 对字节缓冲区进行位移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com