Мне удалось изменить решение, предоставленное Брэдом Кристи, чтобы получить ожидаемые результаты для часов, минут, секунд, месяцев, дней и лет, все из которых представлены в формате BCD:
static Int32 GetYearFromBCD(Int32 time)
{
int length = time.ToString().Length -1;
List<Int32> YearList = new List<Int32>();
for (Int32 i = length; i >= 0; i --)
{
Int32 place = i * 4;
Int32 val = 0x01 << place;
Int32 curVal = (Int32)(time / val);
if (curVal > 9 && YearList.Count > 0)
{
Int32 delta = (Int32)(curVal / 10);
YearList[YearList.Count - 1] += delta;
curVal -= delta * 10;
}
YearList.Add(curVal);
time -= curVal << place;
}
Int32 Year = 0;
for (Int32 y = 0; y < YearList.Count; y++)
Year += YearList[y] * (Int32)Math.Pow(10,(length+1 - y)-1);
return Year;
}
Я хотел бы предоставить обновление для этого вопроса.После того, как устройство работало в течение нескольких дней в течение Нового года, я смог полностью подтвердить, что кодовое решение, опубликованное Брэдом, делает именно то, что нам нужно.
Я смог подтвердить свои подозрения, что ожидаемое значение действительно было двоичным кодом, и я смог подтвердить, что ожидаемое значение работает только в шестнадцатеричном формате.Сотрудник был в состоянии независимо подтвердить время и дату, используя таблицу для стандарта, поэтому я чувствую себя комфортно, укладывая это в постель.
Я смог подтвердить, что по какой-либо причине десятичное значение данныхне работает, я могу только заключить, что данные передаются устройством в виде шестнадцатеричного значения, моя единственная забота - будут ли другие приложения работать аналогичным способом.
Я ценю помощь каждого в выяснении этого, некоторыеиз комментариев ведут меня по пути, который позволяет мне выяснить.