Reed Solomon Codec C code implement!
//this code is from Internet, not mine. thank for the author
//C code begin
/////////////////////////////////////////////////////////////////////////////
/*
* Reed-Solomon coding and decoding
* This code supports a symbol size from 2 bits to 16 bits,
* implying a block size of 32-bit symbols (6 bits) up to 65535
* 16-bit symbols (1,048,560 bits).
* Note that if symbols larger than 8 bits are used, the type of each
* data array element switches from unsigned char to unsigned int. The
* caller must ensure that elements larger than the symbol range are
* not passed to the encoder or decoder.
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MM 8 /* RS code over GF(2**MM) - change to suit */
#define KK 239 /* KK = number of information symbols */
//#define MM 4
//#define KK 9
#define NN ((1 << MM) - 1)
#define TT 8
//#define TT 3
#define DEBUG 1
#define PS 1
#if (MM < 8)
typedef unsigned char dtype;
#else
typedef unsigned int dtype;
#endif
#if (KK >= NN)
#error "KK must be less than 2**MM - 1"
#endif
/*primitive polynomials */
#if(MM == 2)
int pp[MM+1] = { 1, 1, 1 };
#elif(MM == 3)
/* 1 + x + x^3 */
int pp[MM+1] = { 1, 1, 0, 1 };
#elif(MM == 4)
/* 1 + x + x^4 */
int pp[MM+1] = { 1, 1, 0, 0, 1 };
#elif(MM == 5)
/* 1 + x^2 + x^5 */
int pp[MM+1] = { 1, 0, 1, 0, 0, 1 };
#elif(MM == 6)
/* 1 + x + x^6 */
int pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1 };
#elif(MM == 7)
/* 1 + x^3 + x^7 */
int pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 1 };
#elif(MM == 8)
/* 1+x^2+x^3+x^4+x^8 */
int pp[MM+1] = { 1, 0, 1, 1, 1, 0, 0, 0, 1 };
#elif(MM == 9)
/* 1+x^4+x^9 */
int pp[MM+1] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 };