我能够修改 Brad Christie 提供的解决方案,以获得我期望的小时、分钟、秒、月、日和年的结果,所有这些都是 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;
}
我想提供这个问题的更新。设备在新年期间运行了几天后,我能够完全确认 Brad 发布的代码解决方案完全符合我们的需要。
我能够确认我的怀疑,即预期值确实是二进制编码的十进制,我能够确认预期值仅适用于具有 HEX 值。一位同事能够独立确认时间和日期,使用表格作为标准,所以我觉得把它放在床上很舒服。
我能够确认无论出于何种原因,数据的十进制值不起作用,我只能得出结论,设备正在以十六进制值发送数据,我唯一担心的是其他应用程序是否会以类似的方法工作。
感谢大家帮助我解决这个问题,一些评论让我走上了一条让我弄清楚的道路。