第一篇 将代码从C移植到C#

作者: harryhao.zhang 日期:20180908 17:02

第一篇 将代码从C移植到C#_第1张图片
vs.JPG

//例:c代码
//fft.h
typedef double ElemType;    //原始数据序列的数据类型,可以在这里设置  
//typedef long ElemType; 

typedef struct              //定义复数结构体   
{  
    ElemType real,imag;  
}complex;  

//FFT  
void FFT(complex *data_in, complex *data_out, int N);

//fft.c
#include 
#include 
#include "fft.h"

#define PI 3.1415926535897932384626

void FFT(complex *data_in, complex *data_out, int N) 
{
    printf("log N = %d\r\n", N);
}

//c#代码
//FftLong.cs
using System;
using System.Diagnostics;   //调试

using ElemType_long = System.Double;
//using ElemType_long = System.Int64;

namespace NP_FftLong
{
    public class FftLong
    {
        public struct complex_long
        {
            public ElemType_long real;
            public ElemType_long imag;
        };
        
        unsafe public static void FFT_long(complex_long[] data_in, complex_long[] data_out, int N)
        {
            Debug.Write("log N = " + N + "\r\n");
        }
    }
}

从c代码移植到c# 代码会遇到的几个问题

1. 思维的转变,两个文件变成一个文件;

每一组对应的.h和.c,都可以使用一个.cs文件替换。

2. typedef使用using替换。

3. 想直接使用移植的函数,可用static修饰要直接使用的方法;

那么在form中就可以如下直接调用:

using NP_FftLong

static int N = 1024;

//for test
private void button1_Click(object sender, EventArgs e)
{
    complex_long[] data_in = new complex_long[N];
    complex_long[] data_out = new complex_long[N];
    FftLong.FFT_long(data_in, data_out, N);
}

4. C# 中的指针不能使用怎么办,建议全部转换成数组,实在不行就打开unsafe的配置。

选中"允许不安全代码"


第一篇 将代码从C移植到C#_第2张图片
项目配置.PNG

5. log由printf变成Debug.Write();

其他的log函数有换行符,不适合大量数据的调试。


第一篇 将代码从C移植到C#_第3张图片
调试.PNG

觉得这片文章有用,可以微信关注 “开源代码爱好者”


第一篇 将代码从C移植到C#_第4张图片
开源代码爱好者.png

你可能感兴趣的:(第一篇 将代码从C移植到C#)