2017-05-29 9 views
3

C言語のunsigned charをmatlabコードに変換しようとしていますが、unsigned charのベクトルは16進値で埋められています。私は同じことを行うために作成Cのunsigned charをMatLabに変換する

int main() 
{ 
    unsigned char value = 0xaa; 
    signed char temp; 
    // cast to signed value 
    temp = (signed char) value; 
    // if MSB is 1, then this will signed extend and fill the temp variable with 1's 
    temp = temp >> 7; 
    // AND with the reduction variable 
    temp = temp & 0x1b; 
    // finally shift and reduce the value 
    printf("%u",((value << 1)^temp)); 
} 

MATLAB関数:Cコードの下には

value = '0xaa'; 
temp = int8(value); 
temp2 = int8(value); 
temp = bitsra(temp,7); 
temp = and(temp,'0x1b'); 
galois_value = xor(bitsll(temp2,1),temp); 
disp(galois_value); 

印刷の値は、各コードが異なっている、誰かが何が起こっているか知っていますか?

+0

注意を、あなたのCコードは処理系定義の動作に依存しています。 –

+0

これは問題ではないが、CコードはTexas InstrumentsのライブラリでMSP430で使用することができます。シリーズMCUパフォーマンスを比較するためにMatLabにCコードを実装する必要があります。そのため、私はCコードを変更できません。 –

答えて

2

は、あなたが文字列を作成しました:4文字の

value = '0xaa'; 

['0' 'x' 'a' 'a']

あなたは、一般的に変数を処理しないMATLABで

は賢明なビットが、あなたがしたい場合は、試してみてください。

temp = int8(hex2dec('aa')); 
+0

これを使ってcharのベクトル全体を変換できますか? –

+0

MatLabで値を印刷すると、常に '11'が得られ、Cコードは' 335( ' '、なぜ' galois_value'変数が論理値を取得するのでしょうか? –

+1

@IAGOSESTREMOchoa問題があります。プログラムを1行ずつ翻訳しようとしています。そのようにはしないでください。同じ機能を使用しようとするが、各言語に最適な方法を使用する。あなたの質問への答えは、MATLAB関数のドキュメントを読むことで解決できます。 –

関連する問題