我正在研究嵌入式系统应用。我想从源复制到目标,跳过恒定数量的字节。例如:source[6] = {0,1,2,3,4,5}
,我希望目标为 {0,2,4} 跳过一个字节。不幸的是 memcpy
无法满足我的要求。由于我有大量数据要处理并且使用循环会经历时间开销,因此如何在不使用循环的情况下在“C”中实现此目的。
我当前的实现是这样的,复制 1500 字节需要 5-6 毫秒:
unsigned int len_actual = 1500;
/* Fill in the SPI DMA buffer. */
while (len_actual-- != 0)
{
*(tgt_handle->spi_tx_buff ++) = ((*write_irp->buffer ++)) | (2 << 16) | DSPI_PUSHR_CONT;
}
最佳答案
你可以编写一个“ cherry-pick 器”函数
void * memcpk(void * destination, const void * source,
size_t num, size_t size
int (*test)(const void * item));
最多复制 num
个“对象”,每个对象的大小为 size
源
到目的地
。仅复制满足测试的对象。
然后用
int oddp(const void * intptr) { return (*((int *)intptr))%2; }
int evenp(const void * intptr) { return !oddp(intptr); }
你可以这样做
int destination[6];
memcpk(destination, source, 6, sizeof(int), evenp);
.
关于从一个内存复制到另一个内存,跳过 C 中的常量字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49116227/