2014-01-06 71 views
0

我有这个C++代码,并将其转换为c#(.net框架4)代码。 有没有人为我的malloc,免费和sprintf方法提示?C++代码(malloc方法)以c#代码

int monate = ee; 
double *forward; 
double *backward; 
size_t bytes = 6*sizeof(double); 
forward = (double *)malloc(monate * bytes); 
backward = (double *)malloc(monate * bytes); 

for (int i = 0; i <= monate; i++) { 
    forward[i] = 0.; 
    backward[i] = rate; 
} 

forward[0]  = auszahlungsbetrag; 
backward[0]  = 0.; 
backward[monate] = rate + rest; 

double ez = esolver(12 , monate, forward, backward); 
printf("Effektivzins: %.2f\n", ez); 

char tmp0[256]; 
sprintf (tmp0, "Rate: %.2f (%f)" , rate, rate); 
writeToLogFile(tmp0); 

char tmp[256]; 
sprintf (tmp, "Effektivzins: %.2f (%f)" , ez, ez); 
writeToLogFile(tmp); 

free(forward); 
free(backward); 

这是我转换后的c#代码。对于malloc方法,free和sprintf我有一些麻烦将它转换为c#。

using System;

namespace Zinsrechner 
{ 
public static class Basic 
{ 

    public static void basic(double aa, double auszahlungsbetrag, double cc, int ee, double rest) 
    { 

     Writelog.writeToLogFile("Start der Berechnung, Type BASIC"); 
     Writelog.writeToLogFileDouble("Kreditvolumen: ", aa); 
     Writelog.writeToLogFileDouble("Auszahlungsbetrag: ", auszahlungsbetrag); 
     Writelog.writeToLogFileDouble("Nominalzins: ", cc); 
     Writelog.writeToLogFileInt("Laufzeit: ", ee); 
     Writelog.writeToLogFileDouble("Restschuld: ", rest); 

     ///////// 

     // Ratenberechnung 

     double nomzins = (cc/12.0/100.0) + 1.0; 
     double unten = 0.0; 

     for (int x = 0 ; x <= ee-1 ; x++) 
     { 
      unten = unten + Math.Pow(nomzins,x); 
     } 

     double rate = ((aa * Math.Pow(nomzins, ee)) - rest)/unten; 
     Console.Write("Rate: {0:f2}\n", rate); 

     int monate = ee; 
     double[] forward; 
     double[] backward; 
     uint bytes = 6 * sizeof(double); 
     //C++ TO C# CONVERTER TODO TASK: The memory management function 'malloc' has no equivalent in C#: 
     //forward = (double)malloc(monate * bytes); 
     forward = (double)(monate * bytes); 
     //C++ TO C# CONVERTER TODO TASK: The memory management function 'malloc' has no equivalent in C#: 
     backward = (double)malloc(monate * bytes); 

     for (int i = 0; i <= monate; i++) 
     { 
      forward[i] = 0.0; 
      backward[i] = rate; 
     } 

     forward[0] = auszahlungsbetrag; 
     backward[0] = 0.0; 
     backward[monate] = rate + rest; 

     double ez = Effektivzinssolver.esolver(12, monate, forward, backward); 
     Console.Write("Effektivzins: {0:f2}\n", ez); 

     string tmp0 = new string(new char[256]); 
     tmp0 = string.Format("Rate: {0:f2} ({1:f})", rate, rate); 
     Writelog.writeToLogFile(tmp0); 

     string tmp = new string(new char[256]); 
     tmp = string.Format("Effektivzins: {0:f2} ({1:f})", ez, ez); 
     Writelog.writeToLogFile(tmp); 

     //C++ TO C# CONVERTER TODO TASK: The memory management function 'free' has no equivalent in C#: 
     free(forward); 
     //C++ TO C# CONVERTER TODO TASK: The memory management function 'free' has no equivalent in C#: 
     free(backward); 


    } 
} 
} 

+0

这不是C++代码,那是C代码。 – Angew

+2

@Angew这并不是说这里的代码不是有效的C++。为什么,我一直认为“C++”是指整个语言,而不仅仅是那些不在经典C中的部分。 – user3109672

+0

@ user3109672 OK,是的。但是,将惯用的C++代码转换为C#将遵循一个完全不同的过程,即将此“C与新奇文件扩展名”代码转换为C#。 – Angew

回答

1
double[] forward = new double[monate * 6]; 

你不需要free()。 C#被垃圾收集。

1

在C#中,你不需要关心内存 - 垃圾收集器对付它很棒。你的代码必须是这样的:

int monate = ee; 
double[] forward = new double[monate * 6]; 
double[] backward = new double[monate * 6]; 

for (int i = 0; i <= monate; i++) { 
    forward[i] = 0.; 
    backward[i] = rate; 
} 

forward[0]  = auszahlungsbetrag; 
backward[0]  = 0; 
backward[monate] = rate + rest; 

double ez = esolver(12 , monate, forward, backward); 
Console.WriteLine("Effektivzins: {0}\n", ez); 

然后,不命名用德语和英语的变量一起;)

1

的malloc当量和自由是:

IntPtr memory = Marshal.AllocHGlobal(100); //malloc 
Marshal.FreeHGlobal(memory); //free 
+0

虽然这是事实,但我认为这并不是很有用,因为在这个例子中,你不需要在C#中进行任何手动内存管理。 – Tobi

0

你可以忘记MallocFree,因为C#有一个垃圾收集器。至于sprintf看看String.Format()Console.WriteLine()

而且,因为它看起来像你的应用似乎应付钱数,我会强烈建议改用decimal类型的double。 (decimal