2

私のプログラムは、ハードウェア デバイスからバイト型の日時パケットを受け取ります。パケットの例は次のとおりです。

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

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

コメントで述べたように、packet[0] はその年の最後の 2 つの数字を表します。したがって、たとえば、これは 10 進数で 2012 年に変換されます。

私の質問は、2012年をユーザーに返すにはどうすればよいですか? 年の最初の 2 つの数字「20」については、次のように呼び出すことができます。

int systemYear = DateTime.Now.Year;

これは、0x000007dc、または 10 進数で 20'12' を返します。年から最後の 2 つの数字 (この場合は "12") を何らかの方法で削除し、代わりにその場所に packet[0] バイトを挿入する必要はありません。

私たちが常に「20XX」という年にいるとは限りません。このプログラムを 2101 年に実行すると、問題が発生します。

また、ハードウェアが私たちが住んでいる現在の年に戻るとは限りません。これは、私のプログラムが実際にチェックしようとしているものです。

たとえば、packet[0] = 0x02 とします。これは、ハードウェアが 2002 年に返されたことを前提としています。

これを達成するための最良の方法は何ですか?

4

2 に答える 2

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

モジュロ演算子を使用して、年の下から10 進数までを取得できます。

int systemYearLastTwoDigits = DateTime.Now.Year % 100;

これは、年の最下位バイトとは関係がないことに注意してください。これは、年の最後の16 進数に相当します。

于 2012-06-21T18:03:06.087 に答える