@@ -73,6 +73,19 @@ namespace JT808.Protocol.Test.MessagePack | |||||
Assert.Equal(JT808Package.EndFlag, jT808MessagePackReader.ReadEnd()); | Assert.Equal(JT808Package.EndFlag, jT808MessagePackReader.ReadEnd()); | ||||
} | } | ||||
[Fact] | |||||
public void ReadDateTimeNullTest() | |||||
{ | |||||
byte[] bytes = "7E0000000000000000000000000000007E".ToHexBytes(); | |||||
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes); | |||||
Assert.Equal(JT808Package.BeginFlag, jT808MessagePackReader.ReadStart()); | |||||
Assert.Null(jT808MessagePackReader.ReadDateTimeNull4()); | |||||
Assert.Null(jT808MessagePackReader.ReadDateTimeNull5()); | |||||
Assert.Null(jT808MessagePackReader.ReadDateTimeNull6()); | |||||
Assert.Equal(JT808Package.EndFlag, jT808MessagePackReader.ReadEnd()); | |||||
} | |||||
[Theory] | [Theory] | ||||
[InlineData("smallchi(Koike)")] | [InlineData("smallchi(Koike)")] | ||||
public void ReadStringTest(string str) | public void ReadStringTest(string str) | ||||
@@ -77,6 +77,25 @@ namespace JT808.Protocol.Test.MessagePack | |||||
Assert.Equal("7E2019061923232301231906192323237E7E2019061923232301231906192323237E", realBytes); | Assert.Equal("7E2019061923232301231906192323237E7E2019061923232301231906192323237E", realBytes); | ||||
} | } | ||||
[Fact] | |||||
public void WriteDateTimeNullTest() | |||||
{ | |||||
byte[] array = new byte[4096]; | |||||
var msgpackWriter = new JT808MessagePackWriter(array); | |||||
msgpackWriter.WriteStart(); | |||||
msgpackWriter.WriteDateTime4(null); | |||||
msgpackWriter.WriteDateTime5(null); | |||||
msgpackWriter.WriteDateTime6(null); | |||||
msgpackWriter.WriteEnd(); | |||||
msgpackWriter.WriteEncode(); | |||||
//===========output========= | |||||
//WriteDateTime4=>YYYYMMDD=>00 00 00 00 | |||||
//WriteDateTime5=>HH-mm-ss-fff|HH-mm-ss-msms=>00 00 00 00 00 | |||||
//WriteDateTime6=>yyMMddHHmmss=>00 00 00 00 | |||||
var encodeBytes = msgpackWriter.FlushAndGetEncodingArray().ToHexString(); | |||||
Assert.Equal("7E0000000000000000000000000000007E".Replace(" ", ""), encodeBytes); | |||||
} | |||||
[Fact] | [Fact] | ||||
public void WriteUTCDateTimeTest() | public void WriteUTCDateTimeTest() | ||||
{ | { | ||||
@@ -59,12 +59,12 @@ | |||||
<PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" /> | <PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" /> | ||||
<PackageReference Include="System.Memory" Version="4.5.4" /> | <PackageReference Include="System.Memory" Version="4.5.4" /> | ||||
<PackageReference Include="System.Reflection.Extensions" Version="4.3.0" /> | <PackageReference Include="System.Reflection.Extensions" Version="4.3.0" /> | ||||
<PackageReference Include="System.Text.Json" Version="5.0.0" /> | |||||
<PackageReference Include="System.Text.Json" Version="5.0.1" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' "> | <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' "> | ||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> | <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> | ||||
<PackageReference Include="System.Text.Json" Version="5.0.0" /> | |||||
<PackageReference Include="System.Text.Json" Version="5.0.1" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net5' "> | <ItemGroup Condition=" '$(TargetFramework)' == 'net5' "> | ||||
@@ -8012,6 +8012,12 @@ | |||||
</summary> | </summary> | ||||
<param name="fromBase">>D2: 10 X2:16</param> | <param name="fromBase">>D2: 10 X2:16</param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTimeNull6(System.String)"> | |||||
<summary> | |||||
yyMMddHHmmss | |||||
</summary> | |||||
<param name="fromBase">>D2: 10 X2:16</param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTime5(System.String)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTime5(System.String)"> | ||||
<summary> | <summary> | ||||
HH-mm-ss-msms | HH-mm-ss-msms | ||||
@@ -8019,18 +8025,37 @@ | |||||
</summary> | </summary> | ||||
<param name="format">D2: 10 X2:16</param> | <param name="format">D2: 10 X2:16</param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTimeNull5(System.String)"> | |||||
<summary> | |||||
HH-mm-ss-msms | |||||
HH-mm-ss-fff | |||||
</summary> | |||||
<param name="format">D2: 10 X2:16</param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTime4(System.String)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTime4(System.String)"> | ||||
<summary> | <summary> | ||||
YYYYMMDD | YYYYMMDD | ||||
</summary> | </summary> | ||||
<param name="format">D2: 10 X2:16</param> | <param name="format">D2: 10 X2:16</param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTimeNull4(System.String)"> | |||||
<summary> | |||||
YYYYMMDD | |||||
</summary> | |||||
<param name="format">D2: 10 X2:16</param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTime3(System.String)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTime3(System.String)"> | ||||
<summary> | <summary> | ||||
YYMMDD | YYMMDD | ||||
</summary> | </summary> | ||||
<param name="format">D2: 10 X2:16</param> | <param name="format">D2: 10 X2:16</param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackReader.ReadDateTimeNull3(System.String)"> | |||||
<summary> | |||||
YYMMDD | |||||
</summary> | |||||
<param name="format">D2: 10 X2:16</param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime6(System.DateTime,System.Int32)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime6(System.DateTime,System.Int32)"> | ||||
<summary> | <summary> | ||||
yyMMddHHmmss | yyMMddHHmmss | ||||
@@ -8038,6 +8063,13 @@ | |||||
<param name="value"></param> | <param name="value"></param> | ||||
<param name="fromBase"></param> | <param name="fromBase"></param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime6(System.Nullable{System.DateTime},System.Int32)"> | |||||
<summary> | |||||
yyMMddHHmmss | |||||
</summary> | |||||
<param name="value"></param> | |||||
<param name="fromBase"></param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime5(System.DateTime,System.Int32)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime5(System.DateTime,System.Int32)"> | ||||
<summary> | <summary> | ||||
HH-mm-ss-msms | HH-mm-ss-msms | ||||
@@ -8046,6 +8078,14 @@ | |||||
<param name="value"></param> | <param name="value"></param> | ||||
<param name="fromBase"></param> | <param name="fromBase"></param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime5(System.Nullable{System.DateTime},System.Int32)"> | |||||
<summary> | |||||
HH-mm-ss-msms | |||||
HH-mm-ss-fff | |||||
</summary> | |||||
<param name="value"></param> | |||||
<param name="fromBase"></param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime4(System.DateTime,System.Int32)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime4(System.DateTime,System.Int32)"> | ||||
<summary> | <summary> | ||||
YYYYMMDD | YYYYMMDD | ||||
@@ -8055,6 +8095,15 @@ | |||||
<param name="value"></param> | <param name="value"></param> | ||||
<param name="fromBase"></param> | <param name="fromBase"></param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime4(System.Nullable{System.DateTime},System.Int32)"> | |||||
<summary> | |||||
YYYYMMDD | |||||
BCD[4] | |||||
数据形如:20200101 | |||||
</summary> | |||||
<param name="value"></param> | |||||
<param name="fromBase"></param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime3(System.DateTime,System.Int32)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime3(System.DateTime,System.Int32)"> | ||||
<summary> | <summary> | ||||
YYMMDD | YYMMDD | ||||
@@ -8064,6 +8113,15 @@ | |||||
<param name="value"></param> | <param name="value"></param> | ||||
<param name="fromBase"></param> | <param name="fromBase"></param> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime3(System.Nullable{System.DateTime},System.Int32)"> | |||||
<summary> | |||||
YYMMDD | |||||
BCD[4] | |||||
数据形如:20200101 | |||||
</summary> | |||||
<param name="value"></param> | |||||
<param name="fromBase"></param> | |||||
</member> | |||||
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteBigNumber(System.String,System.Int32)"> | <member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteBigNumber(System.String,System.Int32)"> | ||||
<summary> | <summary> | ||||
数字编码 大端模式、高位在前 | 数字编码 大端模式、高位在前 | ||||
@@ -263,6 +263,31 @@ namespace JT808.Protocol.MessagePack | |||||
return d; | return d; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// yyMMddHHmmss | |||||
/// </summary> | |||||
/// <param name="fromBase">>D2: 10 X2:16</param> | |||||
public DateTime? ReadDateTimeNull6(string format = "X2") | |||||
{ | |||||
DateTime? d; | |||||
try | |||||
{ | |||||
var readOnlySpan = GetReadOnlySpan(6); | |||||
int year = Convert.ToInt32(readOnlySpan[0].ToString(format)) ; | |||||
int month = Convert.ToInt32(readOnlySpan[1].ToString(format)); | |||||
int day = Convert.ToInt32(readOnlySpan[2].ToString(format)); | |||||
int hour = Convert.ToInt32(readOnlySpan[3].ToString(format)); | |||||
int minute = Convert.ToInt32(readOnlySpan[4].ToString(format)); | |||||
int second = Convert.ToInt32(readOnlySpan[5].ToString(format)); | |||||
if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0) return null; | |||||
d = new DateTime(year + JT808Constants.DateLimitYear, month, day, hour, minute, second); | |||||
} | |||||
catch (Exception) | |||||
{ | |||||
return null; | |||||
} | |||||
return d; | |||||
} | |||||
/// <summary> | |||||
/// HH-mm-ss-msms | /// HH-mm-ss-msms | ||||
/// HH-mm-ss-fff | /// HH-mm-ss-fff | ||||
/// </summary> | /// </summary> | ||||
@@ -274,8 +299,8 @@ namespace JT808.Protocol.MessagePack | |||||
{ | { | ||||
var readOnlySpan = GetReadOnlySpan(5); | var readOnlySpan = GetReadOnlySpan(5); | ||||
StringBuilder sb = new StringBuilder(4); | StringBuilder sb = new StringBuilder(4); | ||||
sb.Append(readOnlySpan[3].ToString("X2")); | |||||
sb.Append(readOnlySpan[4].ToString("X2")); | |||||
sb.Append(readOnlySpan[3].ToString(format)); | |||||
sb.Append(readOnlySpan[4].ToString(format)); | |||||
d = new DateTime( | d = new DateTime( | ||||
DateTime.Now.Year, | DateTime.Now.Year, | ||||
DateTime.Now.Month, | DateTime.Now.Month, | ||||
@@ -292,6 +317,40 @@ namespace JT808.Protocol.MessagePack | |||||
return d; | return d; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// HH-mm-ss-msms | |||||
/// HH-mm-ss-fff | |||||
/// </summary> | |||||
/// <param name="format">D2: 10 X2:16</param> | |||||
public DateTime? ReadDateTimeNull5(string format = "X2") | |||||
{ | |||||
DateTime? d; | |||||
try | |||||
{ | |||||
var readOnlySpan = GetReadOnlySpan(5); | |||||
StringBuilder sb = new StringBuilder(4); | |||||
sb.Append(readOnlySpan[3].ToString("X2")); | |||||
sb.Append(readOnlySpan[4].ToString("X2")); | |||||
int hour = Convert.ToInt32(readOnlySpan[0].ToString(format)); | |||||
int minute = Convert.ToInt32(readOnlySpan[1].ToString(format)); | |||||
int second = Convert.ToInt32(readOnlySpan[2].ToString(format)); | |||||
int millisecond = Convert.ToInt32(sb.ToString().TrimStart()); | |||||
if (hour == 0 && minute == 0 && second == 0 && millisecond == 0) return null; | |||||
d = new DateTime( | |||||
DateTime.Now.Year, | |||||
DateTime.Now.Month, | |||||
DateTime.Now.Day, | |||||
hour, | |||||
minute, | |||||
second, | |||||
millisecond); | |||||
} | |||||
catch | |||||
{ | |||||
return null; | |||||
} | |||||
return d; | |||||
} | |||||
/// <summary> | |||||
/// YYYYMMDD | /// YYYYMMDD | ||||
/// </summary> | /// </summary> | ||||
/// <param name="format">D2: 10 X2:16</param> | /// <param name="format">D2: 10 X2:16</param> | ||||
@@ -302,8 +361,8 @@ namespace JT808.Protocol.MessagePack | |||||
{ | { | ||||
var readOnlySpan = GetReadOnlySpan(4); | var readOnlySpan = GetReadOnlySpan(4); | ||||
StringBuilder sb = new StringBuilder(4); | StringBuilder sb = new StringBuilder(4); | ||||
sb.Append(readOnlySpan[0].ToString("X2")); | |||||
sb.Append(readOnlySpan[1].ToString("X2")); | |||||
sb.Append(readOnlySpan[0].ToString(format)); | |||||
sb.Append(readOnlySpan[1].ToString(format)); | |||||
d = new DateTime( | d = new DateTime( | ||||
Convert.ToInt32(sb.ToString()), | Convert.ToInt32(sb.ToString()), | ||||
Convert.ToInt32(readOnlySpan[2].ToString(format)), | Convert.ToInt32(readOnlySpan[2].ToString(format)), | ||||
@@ -316,6 +375,31 @@ namespace JT808.Protocol.MessagePack | |||||
return d; | return d; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// YYYYMMDD | |||||
/// </summary> | |||||
/// <param name="format">D2: 10 X2:16</param> | |||||
public DateTime? ReadDateTimeNull4(string format = "X2") | |||||
{ | |||||
DateTime? d; | |||||
try | |||||
{ | |||||
var readOnlySpan = GetReadOnlySpan(4); | |||||
StringBuilder sb = new StringBuilder(4); | |||||
sb.Append(readOnlySpan[0].ToString(format)); | |||||
sb.Append(readOnlySpan[1].ToString(format)); | |||||
int year = Convert.ToInt32(sb.ToString()); | |||||
int month = Convert.ToInt32(readOnlySpan[2].ToString(format)); | |||||
int day = Convert.ToInt32(readOnlySpan[3].ToString(format)); | |||||
if (year == 0 && month == 0 && day == 0) return null; | |||||
d = new DateTime(year, month, day); | |||||
} | |||||
catch (Exception) | |||||
{ | |||||
return null; | |||||
} | |||||
return d; | |||||
} | |||||
/// <summary> | |||||
/// YYMMDD | /// YYMMDD | ||||
/// </summary> | /// </summary> | ||||
/// <param name="format">D2: 10 X2:16</param> | /// <param name="format">D2: 10 X2:16</param> | ||||
@@ -336,6 +420,30 @@ namespace JT808.Protocol.MessagePack | |||||
} | } | ||||
return d; | return d; | ||||
} | } | ||||
/// <summary> | |||||
/// YYMMDD | |||||
/// </summary> | |||||
/// <param name="format">D2: 10 X2:16</param> | |||||
public DateTime? ReadDateTimeNull3(string format = "X2") | |||||
{ | |||||
DateTime? d; | |||||
try | |||||
{ | |||||
var readOnlySpan = GetReadOnlySpan(3); | |||||
int year =Convert.ToInt32(readOnlySpan[0].ToString(format)); | |||||
int month=Convert.ToInt32(readOnlySpan[1].ToString(format)); | |||||
int day = Convert.ToInt32(readOnlySpan[2].ToString(format)); | |||||
if (year == 0 && month == 0 && day == 0) return null; | |||||
d = new DateTime( | |||||
year + JT808Constants.DateLimitYear, month,day | |||||
); | |||||
} | |||||
catch (Exception) | |||||
{ | |||||
d = JT808Constants.UTCBaseTime; | |||||
} | |||||
return d; | |||||
} | |||||
public DateTime ReadUTCDateTime() | public DateTime ReadUTCDateTime() | ||||
{ | { | ||||
DateTime d; | DateTime d; | ||||
@@ -172,6 +172,34 @@ namespace JT808.Protocol.MessagePack | |||||
writer.Advance(6); | writer.Advance(6); | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// yyMMddHHmmss | |||||
/// </summary> | |||||
/// <param name="value"></param> | |||||
/// <param name="fromBase"></param> | |||||
public void WriteDateTime6(DateTime? value, int fromBase = 16) | |||||
{ | |||||
var span = writer.Free; | |||||
if (value == null || value.HasValue) | |||||
{ | |||||
span[0] = 0; | |||||
span[1] = 0; | |||||
span[2] = 0; | |||||
span[3] = 0; | |||||
span[4] = 0; | |||||
span[5] = 0; | |||||
} | |||||
else | |||||
{ | |||||
span[0] = Convert.ToByte(value.Value.ToString("yy"), fromBase); | |||||
span[1] = Convert.ToByte(value.Value.ToString("MM"), fromBase); | |||||
span[2] = Convert.ToByte(value.Value.ToString("dd"), fromBase); | |||||
span[3] = Convert.ToByte(value.Value.ToString("HH"), fromBase); | |||||
span[4] = Convert.ToByte(value.Value.ToString("mm"), fromBase); | |||||
span[5] = Convert.ToByte(value.Value.ToString("ss"), fromBase); | |||||
} | |||||
writer.Advance(6); | |||||
} | |||||
/// <summary> | |||||
/// HH-mm-ss-msms | /// HH-mm-ss-msms | ||||
/// HH-mm-ss-fff | /// HH-mm-ss-fff | ||||
/// </summary> | /// </summary> | ||||
@@ -188,6 +216,34 @@ namespace JT808.Protocol.MessagePack | |||||
span[4] = Convert.ToByte(msSpan.Slice(2, 2).ToString(), fromBase); | span[4] = Convert.ToByte(msSpan.Slice(2, 2).ToString(), fromBase); | ||||
writer.Advance(5); | writer.Advance(5); | ||||
} | } | ||||
/// <summary> | |||||
/// HH-mm-ss-msms | |||||
/// HH-mm-ss-fff | |||||
/// </summary> | |||||
/// <param name="value"></param> | |||||
/// <param name="fromBase"></param> | |||||
public void WriteDateTime5(DateTime? value, int fromBase = 16) | |||||
{ | |||||
var span = writer.Free; | |||||
if (value == null || value.HasValue) | |||||
{ | |||||
span[0] = 0; | |||||
span[1] = 0; | |||||
span[2] = 0; | |||||
span[3] = 0; | |||||
span[4] = 0; | |||||
} | |||||
else | |||||
{ | |||||
span[0] = Convert.ToByte(value.Value.ToString("HH"), fromBase); | |||||
span[1] = Convert.ToByte(value.Value.ToString("mm"), fromBase); | |||||
span[2] = Convert.ToByte(value.Value.ToString("ss"), fromBase); | |||||
var msSpan = value.Value.Millisecond.ToString().PadLeft(4, '0').AsSpan(); | |||||
span[3] = Convert.ToByte(msSpan.Slice(0, 2).ToString(), fromBase); | |||||
span[4] = Convert.ToByte(msSpan.Slice(2, 2).ToString(), fromBase); | |||||
} | |||||
writer.Advance(5); | |||||
} | |||||
public void WriteUTCDateTime(DateTime value) | public void WriteUTCDateTime(DateTime value) | ||||
{ | { | ||||
ulong totalSecends = (ulong)(value.AddHours(-8) - JT808Constants.UTCBaseTime).TotalSeconds; | ulong totalSecends = (ulong)(value.AddHours(-8) - JT808Constants.UTCBaseTime).TotalSeconds; | ||||
@@ -217,6 +273,35 @@ namespace JT808.Protocol.MessagePack | |||||
span[3] = Convert.ToByte(value.ToString("dd"), fromBase); | span[3] = Convert.ToByte(value.ToString("dd"), fromBase); | ||||
writer.Advance(4); | writer.Advance(4); | ||||
} | } | ||||
/// <summary> | |||||
/// YYYYMMDD | |||||
/// BCD[4] | |||||
/// 数据形如:20200101 | |||||
/// </summary> | |||||
/// <param name="value"></param> | |||||
/// <param name="fromBase"></param> | |||||
public void WriteDateTime4(DateTime? value, int fromBase = 16) | |||||
{ | |||||
var span = writer.Free; | |||||
if (value==null || value.HasValue) | |||||
{ | |||||
span[0] = 0; | |||||
span[1] = 0; | |||||
span[2] = 0; | |||||
span[3] = 0; | |||||
} | |||||
else | |||||
{ | |||||
var yearSpan = value.Value.ToString("yyyy").AsSpan(); | |||||
span[0] = Convert.ToByte(yearSpan.Slice(0, 2).ToString(), fromBase); | |||||
span[1] = Convert.ToByte(yearSpan.Slice(2, 2).ToString(), fromBase); | |||||
span[2] = Convert.ToByte(value.Value.ToString("MM"), fromBase); | |||||
span[3] = Convert.ToByte(value.Value.ToString("dd"), fromBase); | |||||
} | |||||
writer.Advance(4); | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// YYMMDD | /// YYMMDD | ||||
/// BCD[4] | /// BCD[4] | ||||
@@ -232,6 +317,31 @@ namespace JT808.Protocol.MessagePack | |||||
span[2] = Convert.ToByte(value.ToString("dd"), fromBase); | span[2] = Convert.ToByte(value.ToString("dd"), fromBase); | ||||
writer.Advance(3); | writer.Advance(3); | ||||
} | } | ||||
/// <summary> | |||||
/// YYMMDD | |||||
/// BCD[4] | |||||
/// 数据形如:20200101 | |||||
/// </summary> | |||||
/// <param name="value"></param> | |||||
/// <param name="fromBase"></param> | |||||
public void WriteDateTime3(DateTime? value, int fromBase = 16) | |||||
{ | |||||
var span = writer.Free; | |||||
if (value == null || value.HasValue) | |||||
{ | |||||
span[0] = 0; | |||||
span[1] = 0; | |||||
span[2] = 0; | |||||
} | |||||
else | |||||
{ | |||||
span[0] = Convert.ToByte(value.Value.ToString("yy"), fromBase); | |||||
span[1] = Convert.ToByte(value.Value.ToString("MM"), fromBase); | |||||
span[2] = Convert.ToByte(value.Value.ToString("dd"), fromBase); | |||||
} | |||||
writer.Advance(3); | |||||
} | |||||
public void WriteXor(int start, int end) | public void WriteXor(int start, int end) | ||||
{ | { | ||||
if (start > end) | if (start > end) | ||||