Was soll denn bitte (11111111 << 8) sein?!
Ich würde das so machen:

data[0] = (uint8_t)(address >> 8);
data[1] = (uint8_t) address;
data[2] = 0;

Casten heisst das Zauberwort ;)

Grüsse, Stefan