encode_rs.c

来自「RS 码的编译码程序」· C语言 代码 · 共 48 行

C
48
字号
/* Reed-Solomon encoder * Copyright 2002, Phil Karn, KA9Q * May be used under the terms of the GNU General Public License (GPL) */#include <string.h>#ifdef FIXED#include "fixed.h"#elif defined(BIGSYM)#include "int.h"#else#include "char.h"#endifvoid ENCODE_RS(#ifndef FIXEDvoid *p,#endifDTYPE *data, DTYPE *bb){#ifndef FIXED  struct rs *rs = (struct rs *)p;#endif  int i, j;  DTYPE feedback;  memset(bb,0,NROOTS*sizeof(DTYPE));  for(i=0;i<NN-NROOTS;i++){    feedback = INDEX_OF[data[i] ^ bb[0]];    if(feedback != A0){      /* feedback term is non-zero */#ifdef UNNORMALIZED      /* This line is unnecessary when GENPOLY[NROOTS] is unity, as it must       * always be for the polynomials constructed by init_rs()       */      feedback = MODNN(NN - GENPOLY[NROOTS] + feedback);#endif      for(j=1;j<NROOTS;j++)	bb[j] ^= ALPHA_TO[MODNN(feedback + GENPOLY[NROOTS-j])];    }    /* Shift */    memmove(&bb[0],&bb[1],sizeof(DTYPE)*(NROOTS-1));    if(feedback != A0)      bb[NROOTS-1] = ALPHA_TO[MODNN(feedback + GENPOLY[0])];    else      bb[NROOTS-1] = 0;  }}

⌨️ 快捷键说明

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