そのため、c ++で記述されたレガシーアプリの置き換えに取り組んでおり、ネットワーク通信で使用される構造体をc#にマッピングする際に小さな問題が発生しました。基本的に、tcp接続のもう一方の端は次の構造体を使用して日付を書き込みますが、その構造体をac#datetimeにシリアル化することによって生成されたバイトを変換する方法がわかりません。それぞれ10ビットと6ビットで構成されている「ミリス」と「セカンド」に到達するまでは簡単で、2バイトが共有されます。値をバイト配列に読み書きするためにビットシフトでこれを解決すると思いますが、私はこれについての経験がありません。
typedef struct DATE_TIME
{
USHORT year;
UCHAR month;
UCHAR day;
UCHAR hour;
UCHAR minute;
USHORT millis : 10;
USHORT second : 6;
}
現在の読み取りの試行のコード
ushort Year = br.ReadUInt16();
byte Month = br.ReadByte();
byte Day = br.ReadByte();
byte Hour = br.ReadByte();
byte Minute = br.ReadByte();
ushort secAndMillSec = br.ReadUInt16();
ushort Milliseconds = (ushort)(secAndMillSec >> 6);
ushort Seconds = (ushort)((ushort)(secAndMillSec << 12)>>12);
書き込みでの最初の試行のコード
bw.Write(Year);
bw.Write(Month);
bw.Write(Day);
bw.Write(Hour);
bw.Write(Minute);
ushort secAndMillSec = (ushort)(Milliseconds << 6);
secAndMillSec = (ushort)(secAndMillSec + Seconds);
bw.Write(secAndMillSec);
再びそれは正しく見えますか?これまでのところ、実行できるすべてのテストデータは空の日付であるため、自分でテストする際に問題が発生しています。