Из информации в комментариях вы на самом деле вывели свое целое число, например, в часах / минутах / секундах / часах-часах с 2 байтами (убедитесь, что вы имели в виду 2 байта, а не 2 полубайта) для каждого поля, например, например. это:
+--+--+--+--+--+--+--+--+
|H |H |M |M |S |S |AM PM|
+--+--+--+--+--+--+--+--+
И вы хотите извлечь 2 байта, содержащие секунды, и добавить к ним 1.
Вам понадобится 8 байтов (64 бита) для представления этого значения, поэтому я буду использовать тип uint64_t вместо беззнакового длинного для этого, вы получите тип uint64_t на #include <stdint.h>
void tick(uint64_t *value) { //input as a parameter
//extract seconds
unsigned int seconds ((*value) >> 16) & 0xffff
printf("seconds = %u\n", seconds);
//add 1 second and pack the value back:
seconds += 1;
*value = (value & 0xffffffff0000ffff) | ((seconds & 0xffff) << 16);
return; //returns void
}
(Теперь вам также может понадобиться обработать перенос, например, увеличить минуту, когда секунды достигают 60 и т. Д.)