我正在将一个.Net应用程序移植到Objective-C,需要添加一段Pure C代码。我有一个字节(或char)数组,需要将带有偏移量的字节数复制到不同的char数组。在.Net上,这是Buffer.BlockCopy方法:
Buffer.BlockCopy(sourceArray, sourceOffset, resultArray, resultOffset, length);
如果我有两个数组,偏移量和长度值,我怎样才能在纯C上执行此操作?不幸的是,我对纯C不够好,而原生的Objective-C bytearray基于它。
任何帮助都将不胜感激。
答案 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);
}
当然,所有长度和偏移都必须有效,否则您将尝试覆盖随机内存并获得未定义的行为。