将C语言的代码转换为C#的代码,C中的指针在C#中应该是用数组吧?
那位大神看看下面的转换
void __ogg_fdrffti(int n, double *wsave, int *ifac){ if (n == 1) return;
drfti1(n, wsave+n, ifac);
}/*c代码*/
void __ogg_fdrffti(int n, double[] wsave, int[] ifac)
{
if (n == 1) return;
drfti1(n,wsave+n,ifac);
}/*转换后的C#代码*/
但是在wsave+n下提示有错误为“运算符“+”无法应用于double[]和int类型的操作数”
求错误的的解决方法,不胜感激
那位大神看看下面的转换
void __ogg_fdrffti(int n, double *wsave, int *ifac){ if (n == 1) return;
drfti1(n, wsave+n, ifac);
}/*c代码*/
void __ogg_fdrffti(int n, double[] wsave, int[] ifac)
{
if (n == 1) return;
drfti1(n,wsave+n,ifac);
}/*转换后的C#代码*/
但是在wsave+n下提示有错误为“运算符“+”无法应用于double[]和int类型的操作数”
求错误的的解决方法,不胜感激
void __ogg_fdrffti(int n, double[] wsave, int[] ifac)
{
if (n == 1) return;
drfti1(n,wsave[n],ifac);
}给分
在C#里面就是array[offse]呗。。如上#4所述
打开“unsafe”编译开关,就支持了。
int[] ntryh ={ 4,2,3,5 };
double tpi = 6.28318530717958647692528676655900577;
double arg,argh,argld,fi;
int ntry=0,i,j=-1;
int k1, l1, l2, ib;
int ld, ii, ip;
int ls, nq, nr;
int ido, ipm, nfm1;
int nl=n;
int nf=0; int temp;
L101:
j++;
if (j < 4)
ntry=ntryh[j];
else
ntry+=2; L104:
nq=nl/ntry;
nr=nl-ntry*nq;
if (nr!=0) goto L101; nf++;
ifac[nf+1]=ntry;
nl=nq;
if(ntry!=2)goto L107;
if(nf==1)goto L107; for (i=1;i<nf;i++){
ib=nf-i+1;
ifac[ib+1]=ifac[ib];
}
ifac[2] = 2; L107:
if(nl!=1)goto L104;
ifac[0]=n;
ifac[1]=nf;
argh=tpi/n;
ls=0;
nfm1=nf-1;
l1=1; if(nfm1==0)return; for (k1=0;k1<nfm1;k1++){
ip=(int)ifac[k1+2];
ld=0;
l2=l1*ip;
ido=n/l2;
ipm=ip-1; for (j=0;j<ipm;j++){
ld+=l1;
i=ls;
temp = i + n;
argld=(double)ld*argh;
fi=0;
for (ii=2;ii<ido;ii+=2){
fi+=1;
arg=fi*argld;
wa[temp++]=Math.Cos(arg);
wa[temp++]=Math.Sin(arg);
}
ls+=ido;
}
l1=l2;
}
}
这是经过修改的C#写的drftil