Browse Source

Crc16计算,增加Modbus的Crc16版本

net45
大石头 4 years ago
parent
commit
02b18e4385
  1. 4
      CrazyCoder/CrazyCoder.csproj
  2. 33
      XCoder/Tools/FrmSecurity.cs
  3. 7
      XCoder/XCoder.csproj
  4. 4
      XCoderLinux/XCoderLinux.csproj
  5. 2
      XCoderWpf/XCoderWpf.csproj

4
CrazyCoder/CrazyCoder.csproj

@ -117,13 +117,13 @@
<Version>5.4.1.1</Version>
</PackageReference>
<PackageReference Include="NewLife.Core">
<Version>8.10.2021.320-beta3</Version>
<Version>8.10.2021.327-rc1</Version>
</PackageReference>
<PackageReference Include="NewLife.Stardust">
<Version>1.4.2021.320-beta3</Version>
</PackageReference>
<PackageReference Include="NewLife.XCode">
<Version>10.1.2021.320-beta3</Version>
<Version>10.1.2021.327-rc1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>

33
XCoder/Tools/FrmSecurity.cs

@ -337,8 +337,9 @@ namespace XCoder.Tools
var buf = GetSource();
//rtResult.Text = "{0:X4}\r\n{0}".F(buf.Crc16());
var rs = buf.Crc16();
buf = rs.GetBytes(false);
SetResult("/*数字、HEX编码、Base64编码*/", rs + "", buf.ToHex(), buf.ToBase64());
var data = rs.GetBytes(false);
var mcrc = Modbus_CRC(buf, 0, buf.Length);
SetResult("/*数字、HEX编码、Base64编码、Modbus-Crc*/", rs + "", data.ToHex(), data.ToBase64(), mcrc.GetBytes().ToHex("-"));
}
private void btnDES_Click(Object sender, EventArgs e)
@ -734,5 +735,33 @@ namespace XCoder.Tools
//return sb.ToString().Trim();
}
#endregion
#region Modbus_CRC
private static readonly UInt16[] crc_ta = new UInt16[16] { 0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400, };
/// <summary>Crc校验</summary>
/// <param name="data"></param>
/// <param name="offset">偏移</param>
/// <param name="count">数量</param>
/// <returns></returns>
public static UInt16 Modbus_CRC(Byte[] data, Int32 offset, Int32 count = -1)
{
if (data == null || data.Length < 1) return 0;
UInt16 u = 0xFFFF;
Byte b;
if (count == 0) count = data.Length - offset;
for (var i = offset; i < count; i++)
{
b = data[i];
u = (UInt16)(crc_ta[(b ^ u) & 15] ^ (u >> 4));
u = (UInt16)(crc_ta[((b >> 4) ^ u) & 15] ^ (u >> 4));
}
return u;
}
#endregion
}
}

7
XCoder/XCoder.csproj

@ -310,7 +310,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core">
<Version>8.10.2021.320-beta3</Version>
<Version>8.10.2021.327-rc1</Version>
</PackageReference>
<PackageReference Include="NewLife.Net">
<Version>3.6.2020.1002</Version>
@ -319,9 +319,12 @@
<Version>1.4.2021.320-beta3</Version>
</PackageReference>
<PackageReference Include="NewLife.XCode">
<Version>10.1.2021.320-beta3</Version>
<Version>10.1.2021.327-rc1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Star\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>del "$(TargetDir)*.xml" /q</PostBuildEvent>

4
XCoderLinux/XCoderLinux.csproj

@ -48,8 +48,8 @@
<ItemGroup>
<PackageReference Include="GtkSharp" Version="3.24.24.4" />
<PackageReference Include="NewLife.Core" Version="8.10.2021.320-beta3" />
<PackageReference Include="NewLife.XCode" Version="10.1.2021.320-beta3" />
<PackageReference Include="NewLife.Core" Version="8.10.2021.327-rc1" />
<PackageReference Include="NewLife.XCode" Version="10.1.2021.327-rc1" />
<PackageReference Include="System.IO.Ports" Version="5.0.1" />
<PackageReference Include="System.Management" Version="5.0.0" />
</ItemGroup>

2
XCoderWpf/XCoderWpf.csproj

@ -31,7 +31,7 @@
<ItemGroup>
<PackageReference Include="HandyControls" Version="3.2.0" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.2" />
<PackageReference Include="NewLife.XCode" Version="10.1.2021.320-beta3" />
<PackageReference Include="NewLife.XCode" Version="10.1.2021.327-rc1" />
<PackageReference Include="Prism.DryIoc" Version="8.0.0.1909" />
</ItemGroup>

Loading…
Cancel
Save