Я приведу короткий пример, чтобы продемонстрировать идею. Вы можете распространить это решение на весь формат ввода даты.
Формат BCD инкапсулирует ровно две десятичных цифры в одно 8-битное число. Например, представление 92
будет в двоичном виде:
1001 0010
или 0x92
в шестнадцатеричном формате. Это бывает 146
при преобразовании в десятичную.
Код для этого должен сдвинуть первую цифру влево на 4 бита, а затем объединить со второй цифрой. Итак:
byte to_bcd(int n)
{
// extract each digit from the input number n
byte d1 = n / 10;
byte d2 = n % 10;
// combine the decimal digits into a BCD number
return (d1 << 4) | d2;
}