Использовать это опасно.Поскольку существует неявное приведение из unsigned char * к int *, если число больше 0xFF, оно будет использовать байты (макс. 3) рядом с переменной в стеке и искажать их значения.
Проблема с% hhd заключается в том, что в зависимости от размера целого (не обязательно 4 байта) он может быть не 1 байтом.
Кажется, что sscanf не поддерживает хранение чисел в символ, я предлагаю вамвместо этого используйте int.Хотя, если вы хотите перебросить символ, вы можете просто затем бросить int в тип char, например:
int dest;
int len;
len = sscanf(source,"%c%d",&separator,&dest);
dest = (unsigned char)dest;