FWIW: I'm fine with casting to char * (or unsigned char *) to be able to do standards compliant arithmetic inside the function body, as long as the function prototypes still make the intention clear.