1

このコードは、unsigned longベクトル変数cR1NB_ERRORS数値に変換します (a変数にこれらの数値を出力します)。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int EXT_DEGREE = 8;
int NB_ERRORS = 8;
int BIT_SIZE_OF_LONG = 32;
typedef unsigned short gf_t;
int main(void){

int j, k, l;
gf_t a;
unsigned long cR1 [] = {418636844,2037720909}; //example
for (l = 0; l < NB_ERRORS; ++l) {
    k = (l * EXT_DEGREE) / BIT_SIZE_OF_LONG;
    j = (l * EXT_DEGREE) % BIT_SIZE_OF_LONG;
    a = cR1[k] >> j;
    if(j + EXT_DEGREE > BIT_SIZE_OF_LONG)
        a ^= cR1[k + 1] << (BIT_SIZE_OF_LONG - j);
    a &= ((1 << EXT_DEGREE) - 1);
    printf("a = %d\n", a);
}

たとえば、次の 2 つの要素を持つ cR1 配列があります。

0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,0 1,0,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,1,1,1,1,0

そのコードを実行すると、次のようになります。

    a = 44
    a = 228
    a = 243
    a = 24
    a = 77
    a = 39
    a = 117
    a = 121

このコードは右から左に変換します。左から右に変換するように変更します。これはどこで変更できますか?

4

1 に答える 1

0

j計算線を修正してみてください。それを次のように置き換えます。

j = ( (NB_ERRORS - 1 - l) * EXT_DEGREE) % BIT_SIZE_OF_LONG;

に含まれる数字cR1は左から順に変換されます。出力は次のようになります。

a = 24
a = 243
a = 228
a = 44
a = 121
a = 117
a = 39
a = 77
于 2016-11-28T15:06:04.957 に答える