⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reedsolomon.pas

📁 data matrix编码程序 将字符串转换为二维码黑白图形
💻 PAS
字号:
unit ReedSolomon;

interface

type

  TPloy = array of byte;

function Add(x, y : byte) : byte;
function Mul(x, y : byte) : byte;

function PloyMod(x, y : TPloy) : TPloy;

implementation

uses SysUtils;

function Add(x, y : byte) : byte;
begin
  Result := x xor y;
end;

function Mul(x, y : byte) : byte;
var
   i : integer;
   b : byte;
   wx, wy, r : longword;
begin
  wx := x;
  wy := y;
  r := 0;
  for i := 0 to 7 do
  begin
    b := wy mod 2;
    wy := wy shr 1;
    if b <> 0 then
    begin
      r := r xor wx;
    end;
    wx := wx shl 1;
  end;
  if r >= 32768 then r := r xor (301 * 128);
  if r >= 16384 then r := r xor (301 * 64);
  if r >= 8192  then r := r xor (301 * 32);
  if r >= 4096  then r := r xor (301 * 16);
  if r >= 2048  then r := r xor (301 * 8);
  if r >= 1024  then r := r xor (301 * 4);
  if r >= 512   then r := r xor (301 * 2);
  if r >= 256   then r := r xor (301);
  Result := r;
end;

function PloyMod(x, y : TPloy) : TPloy;
var
  i, j, k : integer;
  xx : byte;
begin
  if y[Length(y) - 1] <> 1 then
  begin
    raise Exception.Create('除式必须是首一多项式!');
  end;
  for i := High(x) downto High(y) do
  begin
    xx := x[i];
    if xx > 0 then
    begin
      for j := High(y) downto 0 do
      begin
        k := i - Length(y)+ 1 + j;
        x[k] := Add(x[k], Mul(y[j], xx));
      end;
    end;
  end;
  SetLength(Result, High(y));
  for i := 0 to High(y) - 1 do Result[i] := x[i];
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -