Что касается этого в Java:
Ваша петля
for(int i = 0 ; i < SourceDataSize ; i ++ ) {
Destination[i] = SourceData[i + 0x100];
}
всегда начнет копировать данные из 0x100
элементов в SourceData; это может быть нежелательным поведением. (Например, когда i=0
, Destination[0] = SourceData[0 + 0x100];
и т. Д.) Это было бы то, что вы хотели, если вы никогда не хотели копировать SourceData[0]..SourceData[0xFF]
, но учтите, что жесткое кодирование предотвращает его замену для замены. тетср.
Причина, по которой значение intSize
указано в исходном коде, вероятна потому, что первые элементы intSize
не являются частью «фактических» данных, и эти байты каким-то образом используются для учета (как запись того, что общий размер буфера есть). memcpy
сам не «видит» смещение; он знает только указатель, с которого он начинается. SourceData + intSize
создает указатель, который указывает intSize
байт за SourceData
.
Но, , что более важно , то, что вы делаете, вероятно, будет чрезвычайно медленным . memcpy
- это очень сильно оптимизированная функция, которая отображается на тщательно настроенную сборку на большинстве архитектур, и замена ее простой итерацией по циклам за байтом существенно повлияет на характеристики производительности кода. Хотя то, что вы делаете, уместно, если вы пытаетесь понять, как работают memcpy и указатели , учтите, что если вы пытаетесь перенести существующий код на Java для реального использования, вы, вероятно, захотите использовать морально эквивалентную Java функция как java.util.Arrays.copyOf
.