ClassLibraryWeiBao/QR二维码/ReedSolomon/ReedSolomonEncoder.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;

namespace Gma.QrCodeNet.Encoding.ReedSolomon
{
	internal sealed class ReedSolomonEncoder
	{
		/// <summary>
		/// Encode an array of data codeword with GaloisField 256. 
		/// </summary>
		/// <param name="dataBytes">Array of data codewords for a single block.</param>
		/// <param name="numECBytes">Number of error correction codewords for data codewords</param>
		/// <param name="generatorPoly">Cached or newly create GeneratorPolynomial</param>
		/// <returns>Return error correction codewords array</returns>
		internal static byte[] Encode(byte[] dataBytes, int numECBytes, GeneratorPolynomial generatorPoly)
		{
			int dataLength = dataBytes.Length;
			if(generatorPoly == null)
				throw new ArgumentNullException("generator", "GeneratorPolynomial var is null");
			if(dataLength == 0)
				throw new ArgumentException("There is no data bytes to encode");
			if(numECBytes <= 0)
				throw new ArgumentException("No Error Correction bytes");
			int[] toEncode = ConvertToIntArray(dataBytes, dataLength, numECBytes);
			
			Polynomial generator = generatorPoly.GetGenerator(numECBytes);
			
			Polynomial dataPoly = new Polynomial(generator.GField, toEncode);
			
			PolyDivideStruct divideResult = dataPoly.Divide(generator);
			
			int[] remainderCoeffs = divideResult.Remainder.Coefficients;
			
			return ConvertTosByteArray(remainderCoeffs, numECBytes);
			
		}
		
		/// <summary>
		/// Convert data codewords to int array. And add error correction space at end of that array
		/// </summary>
		/// <param name="dataBytes">data codewords array</param>
		/// <param name="dataLength">data codewords length</param>
		/// <param name="numECBytes">Num of error correction bytes</param>
		/// <returns>Int array for data codewords array follow by error correction space</returns>
		private static int[] ConvertToIntArray(byte[] dataBytes, int dataLength, int numECBytes)
		{
			int[] resultArray = new int[dataLength + numECBytes];
			
			for(int index = 0; index < dataLength; index++)
			{
				resultArray[index] = dataBytes[index] & 0xff;
			}
			
			return resultArray;
		}
		
		/// <summary>
		/// Reassembly error correction codewords. As Polynomial class will eliminate zero monomial at front. 
		/// </summary>
		/// <param name="remainder">Remainder byte array after divide. </param>
		/// <param name="numECBytes">Error correction codewords length</param>
后面还有 24 行代码,购买后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。