清除年份的LSB并插入字节

时间:2012-06-21 18:00:21

标签: c#

我的程序从硬件设备接收日期时间包,类型为byte。示例数据包是:

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

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

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

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

int systemYear = DateTime.Now.Year;

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

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

另外,我不能总是假设硬件会返回我们当前所居住的当年。这就是我的程序实际要检查的内容。

所以,比如说包[0] = 0x02。这将假设硬件在2002年返回。

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

2 个答案:

答案 0 :(得分:2)

int packetyear = year - year % 100 + packet[0];

答案 1 :(得分:0)

您可以使用模运算符获取年份的最后十进制数字:

int systemYearLastTwoDigits = DateTime.Now.Year % 100;

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