所以我正在努力替换一个用 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);
再次看起来正确吗?到目前为止,我可以运行它的所有测试数据都是空日期,所以我在测试自己时遇到了问题