А, ну тогда да. void * - вообще штука темная.
Код:
memmove(buffer, ((char *)pMyClass->field.field3 + pMyClass->field.field1), i);
Можно и unsigned char. Не помню точно, но вроде как в сях сложение с указателем прибавляет по размеру того, на что указатель. То есть int *a = (int*)b + 1 физически переведется в b + 4. Ну а что такое void он знать не знает.