Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
70
Task/CRC-32/C-sharp/crc-32-1.cs
Normal file
70
Task/CRC-32/C-sharp/crc-32-1.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
/// <summary>
|
||||
/// Performs 32-bit reversed cyclic redundancy checks.
|
||||
/// </summary>
|
||||
public class Crc32
|
||||
{
|
||||
#region Constants
|
||||
/// <summary>
|
||||
/// Generator polynomial (modulo 2) for the reversed CRC32 algorithm.
|
||||
/// </summary>
|
||||
private const UInt32 s_generator = 0xEDB88320;
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
/// <summary>
|
||||
/// Creates a new instance of the Crc32 class.
|
||||
/// </summary>
|
||||
public Crc32()
|
||||
{
|
||||
// Constructs the checksum lookup table. Used to optimize the checksum.
|
||||
m_checksumTable = Enumerable.Range(0, 256).Select(i =>
|
||||
{
|
||||
var tableEntry = (uint)i;
|
||||
for (var j = 0; j < 8; ++j)
|
||||
{
|
||||
tableEntry = ((tableEntry & 1) != 0)
|
||||
? (s_generator ^ (tableEntry >> 1))
|
||||
: (tableEntry >> 1);
|
||||
}
|
||||
return tableEntry;
|
||||
}).ToArray();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
/// <summary>
|
||||
/// Calculates the checksum of the byte stream.
|
||||
/// </summary>
|
||||
/// <param name="byteStream">The byte stream to calculate the checksum for.</param>
|
||||
/// <returns>A 32-bit reversed checksum.</returns>
|
||||
public UInt32 Get<T>(IEnumerable<T> byteStream)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Initialize checksumRegister to 0xFFFFFFFF and calculate the checksum.
|
||||
return ~byteStream.Aggregate(0xFFFFFFFF, (checksumRegister, currentByte) =>
|
||||
(m_checksumTable[(checksumRegister & 0xFF) ^ Convert.ToByte(currentByte)] ^ (checksumRegister >> 8)));
|
||||
}
|
||||
catch (FormatException e)
|
||||
{
|
||||
throw new CrcException("Could not read the stream out as bytes.", e);
|
||||
}
|
||||
catch (InvalidCastException e)
|
||||
{
|
||||
throw new CrcException("Could not read the stream out as bytes.", e);
|
||||
}
|
||||
catch (OverflowException e)
|
||||
{
|
||||
throw new CrcException("Could not read the stream out as bytes.", e);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
/// <summary>
|
||||
/// Contains a cache of calculated checksum chunks.
|
||||
/// </summary>
|
||||
private readonly UInt32[] m_checksumTable;
|
||||
|
||||
#endregion
|
||||
}
|
||||
4
Task/CRC-32/C-sharp/crc-32-2.cs
Normal file
4
Task/CRC-32/C-sharp/crc-32-2.cs
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
var arrayOfBytes = Encoding.ASCII.GetBytes("The quick brown fox jumps over the lazy dog");
|
||||
|
||||
var crc32 = new Crc32();
|
||||
Console.WriteLine(crc32.Get(arrayOfBytes).ToString("X"));
|
||||
Loading…
Add table
Add a link
Reference in a new issue