Попытка понять Python (для перевода на C) - PullRequest
1 голос
/ 15 февраля 2020

[Теперь закрытая тема, бесполезные топи c в конце]

1 Ответ

0 голосов
/ 15 февраля 2020

Это "кусочки", и + просто объединяет их. Это простейший случай нарезки: [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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...