Это "кусочки", и +
просто объединяет их. Это простейший случай нарезки: [start:end]
создает подпоследовательность последовательности, начиная с позиции start
включительно, заканчивая в позиции end
, эксклюзивом. Если один из них отсутствует (но есть :
), он считается началом / концом полной последовательности. Индексы начинаются с нуля.
Примеры со строкой:
'Hello World'[1:5]
: 'ello'
'Hello World'[:5]
: 'Hello'
'Hello World'[1:]
: 'ello World'
'Hello World'[:1]+'Hello World'[5:]
: 'H World'
Ваш l oop шаг за шагом перебирает ваши данные, сравнивая 4-байтовый блок с текущим Позиция с последовательностью у вас в ROB
, и она возвращает новую последовательность без нее, когда она найдена (так что часть f=...
фактически не изменяет существующую последовательность).
В C вы можете сделать это с memcmp
, затем malloc
и парой вызовов memcpy
, так как вы правильно заметили, что эти данные являются двоичными (содержат нулевые символы), поэтому строковые функции, скорее всего, сломают их.
Надеюсь, я не запутался вверх индексы, и тогда это может выглядеть так:
void* my_function(const void* f, int len){
for(int i=0;i<len;i+=4)
if(memcmp(f+i,ROB,4)==0){
void* ret=malloc(len-4);
memcpy(ret,f,i);
memcpy(ret+i,f+i+4,len-i-4);
return ret;
}
return NULL; // or have it die somehow
}