Je transcris un code C pour Matlab à partir d'une multiplication par 2 dans le champ Gallois, le problème est que mon code matlab n'affiche pas la même valeur que le code C. Apparemment tout va bien, j'ai commenté le code dans matlab pour identifier les adaptations du code C, en dessous des codes.Algorithme de champ de Galois de C à Matlab
C:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char value = 0xaa;
signed char temp;
// cast to signed value
temp = (signed char) value;
printf("\n%d",temp);
// if MSB is 1, then this will signed extend and fill the temp variable with 1's
temp = temp >> 7;
printf("\n%d",temp);
// AND with the reduction variable
temp = temp & 0x1b;
printf("\n%d",temp);
// finally shift and reduce the value
printf("\n%d",((value << 1)^temp));
}
sortie:
-86
-1
27
335
MatLab:
hex = uint8(hex2dec('1B')); % define 0x1b
temp = uint8(hex2dec('AA')); % temp = (signed char) value;
disp(temp);
value = uint8(hex2dec('AA')); % unsigned char value = 0xaa
temp = bitsra(temp,7); % temp = temp >> 7;
disp(temp);
temp = bitand(temp,hex); % temp = temp and 0x1b
disp(temp);
galois_value = bitxor(bitsll(value,1),temp); % ((value << 1)^temp)
disp(galois_value); % printf ("\n%u",...)
sortie:
170
1
1
85
Le code C fonctionne correctement, j'imprime %d
dans le code C pour afficher la valeur entière de la variable parce que la distribution dans le début du code.
Quelqu'un sait ce qui se passe
Pourquoi pensez-vous que 'temp = uint8 (HEX2DEC ('AA'));' équivaut à 'temp = (signed char) valeur? –
Vous devez regarder où les calculs commencent à diverger par eux-mêmes au lieu de nous le faire faire pour vous. –
Ajoutez un 'printf' après chaque ligne dans C et' disp' dans MATLAB. –