我正在将一个.Net应用程序移植到Objective-C,需要添加一段纯C代码。我有一个字节(或字符)数组,需要将带偏移量的字节复制到不同的字符数组。在.Net上,这是Buffer.BlockCopy方法:

Buffer.BlockCopy(sourceArray, sourceOffset, resultArray, resultOffset, length);

如果我有两个数组,偏移量和长度值,如何在纯C上执行此操作?不幸的是,我对纯C不够好,而原生的Objective-C bytearray工作是基于它的。
任何帮助都将不胜感激。

最佳答案

假设数组真的不同,即没有重叠,那么应该使用标准库函数memcpy()来实现这一点。
它只需要三个参数:
目标指针
源指针
字节计数
您可以从缓冲区基址和偏移量计算指针。像这样的:

void BlockCopy(const uint8_t *source, size_t sourceOffset,
               uint8_t *result, size_t resultOffset,
               size_t length)
{
  memcpy(result + resultOffset, source + sourceOffset, length);
}

当然,所有的长度和偏移量都必须有效,否则您将试图覆盖随机内存并获得未定义的行为。

10-07 19:52