Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 需要关于代码转换到Matlab的建议吗_C_Matlab - Fatal编程技术网

C 需要关于代码转换到Matlab的建议吗

C 需要关于代码转换到Matlab的建议吗,c,matlab,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; } 由于使用表达式sc(i

我是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;
     }

由于使用表达式
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
对于此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;
  }
因此,有两个问题:

  • C语言中的
    %
    与Matlab中的
    rem
    mod
    既不完全相同,除非所有的数字都是正数,在这种情况下这并不重要。如果你处理的是负数,那么你需要做一点你所追求的研究
  • 在Matlab中,C中从0->255开始的索引循环应该从1->256开始,因为它从1开始索引数组,而不是像C中那样从0开始索引数组

  • 由于我看不到
    S
    数组声明,您能显示整个代码吗?您应该使用sc(i0+1),而不是使用sc(i0),因为您是从1开始循环,而不是从1开始循环0@rullof:整个代码是。我也在这里插入了一些附加代码。@Bee您的c代码是否按预期工作?@rullof:请稍后通知您。我在想办法谢谢谢谢我在试着用这个谢谢。我尝试了您的代码,但它显示以下错误:试图访问密钥(0);索引必须是正整数或逻辑整数。@Bee已修复该问题;)再试一次。我留下了一个+1谢谢你!我必须不知所措,但编程世界的新手,只有一个C代码似乎工作,并给出了一个有效的输出。在C中有
    inti,j=0;对于(i=0;i<256;++i)状态[i]=i当我试图将其转换为I=1:256 S(I)=I的
    时;结束
    显示:试图访问S(0);索引必须是正整数或逻辑。rc4key(第15行)中的错误S(i)=S(j);。虽然我没有使用任何0。你能给我一些建议吗?整个代码:@Bee不是来自
    s(i)
    ,而是来自
    s(j)
    -显然
    j
    这里必须为零。我会更新我的答案,请查看。再次感谢。它显示的是一个输出,不幸的是我不知道正确与否。我现在可以计算出另一部分,这样最终完整的输出可以与我的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;
      }
    
    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