ClassLibraryWeiBao/QR二维码/DataEncodation/DataEncode.cs
(开头部分) 4KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using Gma.QrCodeNet.Encoding.DataEncodation.InputRecognition;
using Gma.QrCodeNet.Encoding.Versions;
using Gma.QrCodeNet.Encoding.Terminate;
using System.Collections.Generic;
namespace Gma.QrCodeNet.Encoding.DataEncodation
{
/// <remarks>ISO/IEC 18004:2000 Chapter 8.1 Page 14
/// DataEncode is combination of Data analysis and Data encodation step.
/// Which uses sub functions under several different namespaces</remarks>
internal static class DataEncode
{
internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel)
{
RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
EncoderBase encoderBase = CreateEncoder(recognitionResult.Mode, recognitionResult.EncodingName);
BitList encodeContent = encoderBase.GetDataBits(content);
int encodeContentLength = encodeContent.Count;
VersionControlStruct vcStruct =
VersionControl.InitialSetup(encodeContentLength, recognitionResult.Mode, ecLevel, recognitionResult.EncodingName);
BitList dataCodewords = new BitList();
//Eci header
if(vcStruct.isContainECI && vcStruct.ECIHeader != null)
dataCodewords.Add(vcStruct.ECIHeader);
//Header
dataCodewords.Add(encoderBase.GetModeIndicator());
int numLetter = recognitionResult.Mode == Mode.EightBitByte ? encodeContentLength >> 3 : content.Length;
dataCodewords.Add(encoderBase.GetCharCountIndicator(numLetter, vcStruct.VersionDetail.Version));
//Data
dataCodewords.Add(encodeContent);
//Terminator Padding
dataCodewords.TerminateBites(dataCodewords.Count, vcStruct.VersionDetail.NumDataBytes);
int dataCodewordsCount = dataCodewords.Count;
if((dataCodewordsCount & 0x7) != 0)
throw new ArgumentException("data codewords is not byte sized.");
else if(dataCodewordsCount >> 3 != vcStruct.VersionDetail.NumDataBytes)
{
throw new ArgumentException("datacodewords num of bytes not equal to NumDataBytes for current version");
}
EncodationStruct encStruct = new EncodationStruct(vcStruct);
encStruct.Mode = recognitionResult.Mode;
encStruct.DataCodewords = dataCodewords;
return encStruct;
}
internal static EncodationStruct Encode(IEnumerable<byte> content, ErrorCorrectionLevel eclevel)
{
EncoderBase encoderBase = CreateEncoder(Mode.EightBitByte, QRCodeConstantVariable.DefaultEncoding);
BitList encodeContent = new BitList(content);
int encodeContentLength = encodeContent.Count;
后面还有 49 行代码,购买后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。