how is it fucking nobody can write an actually functional CRC32 implementation in C#
This commit is contained in:
parent
a606010f98
commit
091a3e5934
|
@ -5,15 +5,20 @@ namespace libsharperang {
|
|||
public class DataTransforms {
|
||||
public class CrcSum : Crc32Base {
|
||||
public uint CrcKey;
|
||||
public CrcSum() : base(0x77c40d4d^0x35769521, 0xffffffff, 0xffffffff, false, false) => CrcKey=0x77c40d4d;
|
||||
public CrcSum(uint Key) : base(Key^0x35769521, 0xffffffff, 0xffffffff, false, false) => CrcKey=Key;
|
||||
public CrcSum(uint Key, bool _) : base(Key, 0xffffffff, 0xffffffff, false, false) => CrcKey=Key;
|
||||
public CrcSum(uint Mangled, uint Key) : base(0x04c11db7, Mangled, 0xffffffff, true, true) => CrcKey=Key;
|
||||
}
|
||||
private uint Bludgeon(uint iv) {
|
||||
uint ivr=0;
|
||||
for (int i=0;i<32;i++) {
|
||||
uint bit=(iv>>i)&1;
|
||||
ivr |= (bit<<(31-i));
|
||||
}
|
||||
return ~ivr;
|
||||
}
|
||||
public CrcSum CRC;
|
||||
public bool IsCrcInitialised() => (CRC!=null);
|
||||
public void InitialiseCrc() => CRC=new CrcSum();
|
||||
public void InitialiseCrc(uint Key) => CRC=new CrcSum(Key);
|
||||
public void InitialiseCrc(uint Key, bool _) => CRC=new CrcSum(Key, _);
|
||||
public void InitialiseCrc() => CRC=new CrcSum(Bludgeon(0x77c40d4d^0x35769521), 0x77c40d4d);
|
||||
public void InitialiseCrc(uint Key) => CRC=new CrcSum(Bludgeon(Key), Key);
|
||||
public uint GetCrcKey() {
|
||||
if (!IsCrcInitialised()) InitialiseCrc();
|
||||
return CRC.CrcKey;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="CrcDotNET" Version="1.0.3" />
|
||||
<PackageReference Include="LibUsbDotNet" Version="2.2.29" />
|
||||
<PackageReference Include="Zlib.Portable.Signed" Version="1.11.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -99,7 +99,7 @@ namespace libsharperang {
|
|||
}
|
||||
public byte[] BuildTransmitCrc() {
|
||||
DataTransforms _=new DataTransforms();
|
||||
_.InitialiseCrc(0x35769521, true);
|
||||
_.InitialiseCrc(0x35769521);
|
||||
return Build(Opcode.CrcTransmit, transformer.GetCrcKeyBytes(), _);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,9 @@ namespace sharperang {
|
|||
logger.Debug("ClaimUSB => " + printer?.Claim());
|
||||
//logger.Debug("IUsb::Initialised => " + printer?.pUsb?.Initialised());
|
||||
}
|
||||
private void BtTestLine_Click(object sender, RoutedEventArgs e) => logger.Debug("printer::TestCRC() => "+BitConverter.ToString(printer.builder.BuildTransmitCrc()).Replace('-',' '));
|
||||
private void BtTestLine_Click(object sender, RoutedEventArgs e) {
|
||||
logger.Debug("printer::TransmitCrc() => "+BitConverter.ToString(printer.builder.BuildTransmitCrc()).Replace('-', ' '));
|
||||
logger.Debug("printer::TestCRC(0x0000) => "+BitConverter.ToString(printer.builder.Build(Frame.Opcode.SessionBegin, new byte[] { 0x00, 0x00 })).Replace('-',' '));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue