sizeof(uint8_t) will be 1 on an 8-bit byte machine, but it will also be 1 for, say, a 16-bit byte machine too.  However, you multiply by 8 with the presumption that the software is running on an 8-bit byte machine.  Since 16-bit byte machines tend to be quite rare in practice,  certainly enough to hardcode the 8, is there any reason why you bother with sizeof(uint8_t) at all in this case?