Это потому, что вы неправильно назвали переменные в этих строках ...
high = static_cast<uint8_t >(val & 0xFF);
low = static_cast<uint8_t >(val >> 8);
Оператор >>
смещает биты вниз от старших битовых позиций к младшим битовым позициям.Если вам нужно сдвинуть эти биты вниз, чтобы сохранить их (в приведении), это потому, что они изначально не были младшими битами.Итак ...
low = static_cast<uint8_t >(val & 0xFF);
high = static_cast<uint8_t >(val >> 8);
Кстати - побитовый оператор и оператор избыточны, когда вы в любом случае приводите к uint8_t - этого уже достаточно, чтобы отбросить все, кроме младшего байта.Это все еще правильно, просто не обязательно.