2014-07-02 31 views
0

我移植一個.net應用Objective-C和需要添加一塊純C語言代碼。我有一個字節(或字符)數組,並需要將偏移量的字節複製到不同的字符數組。在.NET上這就是Buffer.BlockCopy方法:什麼的.NET Buffer.BlockCopy的純C模擬?

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

我該怎麼做純C,如果我有兩個數組,偏移量和長度值?不幸的是,對於純C而言,我不夠好,本地的Objective-C bytearray工作是基於它的。

任何幫助,將不勝感激。

+0

的memcpy ........ –

+0

感謝。兩種解決方案都可以工 – Olter

+0

的memmove比memcpy的效率較低,而且你不需要的memmove除非你的源和目標重疊,這一點是肯定不會在這裏是如此,除非sourceArray和resultArray是相同的。 –

回答

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); 
} 

當然,所有的長度和偏移量必須是有效的,否則你會嘗試覆蓋隨機內存,並得到不確定的行爲。

1

你可能想memmove

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

注目標是第一位的。

如果您可以確定地說陣列不重疊,您可以使用memcpy而不是memmove

+0

除非resultArray是在C#源一樣sourceArray,它們不能重疊。 –

+0

@JimBalter同意。我只是認爲有必要提一下'memmove'和'memcpy'之間的區別。選擇程序員不應該在正確性和效率之間進行選擇......但通常必須這樣做。 – cnicutar