里德所罗门纠错码

头文件

#include "mln_rs.h"

模块名

rs

函数/宏

mln_rs_encode

mln_rs_result_t *mln_rs_encode(uint8_t *data_vector, size_t len, size_t n, size_t k);

描述:生成纠错码。参数含义:

  • data_vector存放若干个报文,由于报文必须等长,因此这里直接传入一维指针提升处理性能。
  • len每一段数据的长度。
  • n一共多少段数据。
  • k一共多少段纠错码需要生成。

生成的结果中会包含原始数据于纠错码,且纠错码会存放在数据之后。

返回值:成功则返回mln_rs_result_t结构指针,否则返回NULL

mln_rs_decode

mln_rs_result_t *mln_rs_decode(uint8_t **data_vector, size_t len, size_t n, size_t k);

描述:利用纠错码进行纠错。参数含义:

  • data_vector包含纠错码在内的报文数组。注意:这里是二维数组。注意1:数据区中的报文顺序必须与生成时一致,缺失的报文处给NULL,但顺序不可以乱。注意2:当丢失数据个数多于k个时,无法进行修复。
  • len每一段数据的长度。
  • n原始一共多少段数据。
  • k原始一共多少段纠错码被生成。

返回值:成功则返回mln_rs_result_t结构指针,否则返回NULL

mln_rs_result_free

void mln_rs_result_free(mln_rs_result_t *result);

描述:释放上述函数生成的结果结构。

返回值:无

mln_rs_result_get_num

mln_rs_result_get_num(_presult)

描述:获取类行为mln_rs_result_t_presult中处理结果的个数。

返回值:处理结果个数

mln_rs_result_get_data_by_index

mln_rs_result_get_data_by_index(_presult,index)

描述:获取类行为mln_rs_result_t_presult中下标为index的数据,index从0开始。

返回值:结果数据内存地址

示例

#include <stdio.h>
#include "mln_string.h"
#include "mln_rs.h"

int main(int argc, char *argv[])
{
    mln_rs_result_t *res, *dres;
    char origin[] = "AAAABBBBCCCCDDDD";
    uint8_t *err[6] = {0};
    mln_string_t tmp;

    res = mln_rs_encode((uint8_t *)origin, 4, 4, 2);
    if (res == NULL) {
        fprintf(stderr, "rs encode failed.\n");
        return -1;
    }

    err[0] = NULL;
    err[1] = NULL;
    err[2] = (uint8_t *)origin+8;
    err[3] = (uint8_t *)origin+12;
    err[4] = mln_rs_result_get_data_by_index(res, 4);
    err[5] = mln_rs_result_get_data_by_index(res, 5);

    dres = mln_rs_decode(err, 4, 4, 2);
    if (dres == NULL) {
        fprintf(stderr, "rs decode failed.\n");
        return -1;
    }

    mln_string_nset(&tmp, mln_rs_result_get_data_by_index(dres, 1), 4);
    write(STDOUT_FILENO, tmp.data, tmp.len);
    write(STDOUT_FILENO, "\n", 1);

    mln_rs_result_free(res);
    mln_rs_result_free(dres);
    return 0;
}

results matching ""

    No results matching ""