2

我的程序从硬件设备接收一个日期时间包,它是字节类型的。一个示例数据包是:

byte[] packet = new byte[] {0x0C, 0x01, 0x15};

//packet[0] is the last two numbers of the year

如评论中所述,packet[0] 代表一年中的最后两个数字。因此,例如,这将转换为十进制的 2012。

现在我的问题是,如何将 2012 返回给用户?对于今年的前两个数字“20”,我知道我可以调用:

int systemYear = DateTime.Now.Year;

返回:0x000007dc,或十进制的 20'12'。我不需要以某种方式删除年份的最后两个数字,在本例中为“12”,而是在该位置插入数据包 [0] 字节。

我并不总是想假设我们是在“20XX”年。如果这个程序在 2101 年运行,这将导致问题。

此外,我不能总是假设硬件会在我们生活的当年返回。这就是我的程序实际上要检查的内容。

因此,例如数据包 [0] = 0x02。这将假设硬件在 2002 年返回。

实现这一目标的最佳方法是什么?

4

2 回答 2

2
int packetyear = year - year % 100 + packet[0];
于 2012-06-21T18:04:10.093 回答
0

您可以使用模运算符获取年份的最后一位小数:

int systemYearLastTwoDigits = DateTime.Now.Year % 100;

请注意,这与年份的最低有效字节无关,它等于年份的最后一个到十六进制数字。

于 2012-06-21T18:03:06.087 回答