纯C中.Net Buffer.BlockCopy的类似物是什么?

时间:2014-07-02 08:18:38

标签: c bytearray

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

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

如果我有两个数组,偏移量和长度值,我怎样才能在纯C上执行此操作?不幸的是,我对纯C不够好,而原生的Objective-C bytearray基于它。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可能需要memmove

memmove(resultArray + resultOffset, sourceArray + sourceOffset, length);

注意目的地是第一位的。

如果您可以确定数组不重叠,则可以使用memcpy代替memmove

答案 1 :(得分:1)

假设数组确实不同,即没有重叠,您应该使用标准库函数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);
}

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