【发布时间】:2021-12-26 22:22:59
【问题描述】:
基本上我需要做多个memcpy(),我不想在每次memcpy() 调用之后增加目标指针dst++;.. 只是想知道如何节省一些编码时间。
memcpy(dest, src1, 1); // uint8_t
dest += 1;
memcpy(dest, src2, 2); // uint16_t
dest += 2;
memcpy(dest, src3, 1024); // uint8_t*
dest += 1024;
...
如何做多个memcpy()为你增加目标指针?
【问题讨论】:
-
例如 dest += 2;或 memcpy(dest + 1, src2, 2); ?
-
@VladfromMoscow 谢谢,没错,增加一行是一种解决方案。
-
static inline void *CopyAndUpdate(void * restrict s1, const void * restrict s2, size_t n) { return (char *) memcpy(s1, s2, n) + n; },然后是dest = CopyAndUpdate(dest, src1, 1); dest = CopyAndUpdate(dest, src1, 2);。或者static inline void CopyAndUpdate(char * restrict * s1, const void * restrict s2, size_t n) { memcpy(*s1, s2, n); *s1 += n; },然后CopyAndUpdate(&dest, src, 1); CopyAndUpdate(&dest, src, 2);,假设dest的类型是char *。 -
@EugeneSh。没错,但这只是一个例子,我的真实数据最多为 1024 * 4 字节。
-
@EricPostpischil 谢谢埃里克,你的回答很完整。你的功能正是我所需要的。