@synapse_people

Как работает этот код?

uint8_t *x;//где-то выше
//затем идет каст и побитовые оп:
  uint32_t* x32 = (uint32_t*)x;
  x32[ 0] ^= 0x00000000^r;
  x32[ 2] ^= 0x00000010^r;
  x32[ 4] ^= 0x00000020^r;
  x32[ 6] ^= 0x00000030^r;
  x32[ 8] ^= 0x00000040^r;
  x32[10] ^= 0x00000050^r;
  x32[12] ^= 0x00000060^r;
  x32[14] ^= 0x00000070^r;


r- значение uint32_t, не указатель.
Не могу понять, что произойдет при касте uint8 в uint32, помогите плиз
Изначально выделяется 16 байт памяти для x... а тут уже появлятся 14 индекс, то есть - выходит из 16 байт..... не понимаю.
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 1
Кто-то что-то путает, т.к. для этого кода надо, чтобы было выделено 60 байт, скорей всего выделяется 64.
Этот код берет байтовый массив
|00|01|02|..|56|57|58|59|
берет из него по 4 байта и над группой из 4х байт выполняет преобразование, ксоря в этой группе все биты с r кроме определенного. Затем сдвигается на 8 байт, берет следующие 4 байта и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы