从一个内存复制到另一个内存,跳过 C 中的常量字节

标签 c memory

我正在研究嵌入式系统应用。我想从源复制到目标,跳过恒定数量的字节。例如: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/

相关文章:

无法在两个进程 Mach 之间发送消息

C 在头文件中使 volatile sig_atomic_t 全局化

c - 如何编写段错误处理程序,以便不重新启动错误指令? (C 和 Linux)

java - 多线程读取文件

c - ASCII值显示为0

c - 缓冲区溢出未到达 eip

c - valgrind 错误 : Conditional jump or move depends on uninitialised value(s)

java - (Android)应用程序是否共享内存页面?

java - Android中的字节数据类型内存大小

memory - 关于 OpenCL 中 cl_mem 的问题