Я не мог полностью понять последствия того, что я прочитал здесь: Наведение указателя int на char ptr и наоборот
Короче говоря, будет ли это работать?
set4Bytes(unsigned char* buffer) {
const uint32_t MASK = 0xffffffff;
if ((uintmax_t)buffer % 4) {//misaligned
for (int i = 0; i < 4; i++) {
buffer[i] = 0xff;
}
} else {//4-byte alignment
*((uint32_t*) buffer) = MASK;
}
}
Edit
Была длинная дискуссия (это было в комментариях, которые таинственно были удалены) о том, к какому типу должен быть направлен указатель, чтобы проверить выравнивание. Тема теперь адресована here.