需要有关代码转换为Matlab的建议

时间:2013-12-31 04:52:49

标签: c matlab

我是Matlab编程的新手,但必须在Matlab中转换一个C程序。很少有部分让我感到困惑。我在这里放置C和Matlab的部件,并寻找你改进代码的建议,因为完整的代码没有给出正确的输出:

C代码:

     j = 0;
 for (i=0;i<256;i++){
     j = (j+S[i]+key[i%strlen(key)]) %256;
     int t = S[i]; 
     S[i] = S[j]; 
     S[j] = t;
     }

Matlab代码:

     le = length(key);
     sc = 0:255;
     output = 0;
 for i0 = 1:255
     output=rem((output+sc(i0+1)+key(rem(i0,le)+1)),256);
     tm = sc(i0+1);
     sc(i0+1) = sc(outpt+1);
     sc(outpt+1) = tm;
 end

2 个答案:

答案 0 :(得分:4)

由于您使用表达式sc(i0+1)来计算提醒,因此您应该从0开始for循环。

 le = length(key);
 sc = 0:255;
 output = 0;
 for i0 = 0:255
     output=rem((output+sc(i0+1)+key(rem(i0,le)+1)),256);
 end

答案 1 :(得分:2)

对于这个C代码:

  j = 0;
  for (i=0;i<256;i++)
  {
     j = (j+S[i]+key[i%strlen(key)]) %256;
     int t = S[i]; 
     S[i] = S[j]; 
     S[j] = t;
  }

我会得到这个Matlab代码:

j = 0;
for i = 1:256
    j = mod(j + S(i) + key(mod(i-1, length(key)) + 1), 256);
    t = S(i);
    S(i) = S(j+1);
    S(j+1) = t;
end

所以有两个问题:

    C中的
  1. %与Matlab中的remmod都不完全相同,除非你的所有数字都是正数,在这种情况下无关紧要。如果你正在处理负数,那么你需要对你所追求的进行一些研究。
  2. 从0开始的索引循环 - > C中的255应该从1 - >在Matlab中为256,因为它开始将数组索引为1而不是像C中那样归零。