我是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
答案 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
所以有两个问题:
%
与Matlab中的rem
和mod
都不完全相同,除非你的所有数字都是正数,在这种情况下无关紧要。如果你正在处理负数,那么你需要对你所追求的进行一些研究。