char Array -> umwandeln mit atof



  • Hallo!

    Ich habe folgendes Probelm:

    In einem char- Array liegen mir einzelne Zahlenwerte vor. Diese würde ich gerne mit atof() zu einer float Zahl umwandeln. Eine Zahl die in einer Zeile meines Arrays liegt könnete so aussehen: "-12.2345678e-04" oder "1.23456787654". Das Array ist zweidimensional und beinhaltet mehrere Zahlen: value[n][m]

    WEr kann mir helfen?

    Danke schon einmal im Vorraus!



  • Worin liegt das Problem?

    Edit: Und wenn du dir nicht sicher bist, dass die Strings auch immer wohlgeformt sind, würde ich eher zu strtod() greifen.



  • OK vielleicht war das etwas umständlich ausgedrückt.

    Momentan mache ich meine Umwandlung ziemlich kompliziert:

    Mein Array heißt cleanCharValues[][] und ich zunächst alle Zahlen die vor dem Punkt stehen in double Zahlen um, multipliziere sie nach dem Zehnersystem und adiere sie dann nach fogelendem System:

    Denken wir uns meine Zahl sei -12.45678E-02
    Dann lese ich zunächst die "2" ein, danach die "1" und multipliziere sie mit 10.

    10 + 2= 12 ->> die Zahle vor dem Ounkt habe ich schon.

    for(int m=punkt[n]-1; m>-1; m--)
    		{
    			x=cleanCharValues[n][m];
    			ptr = &x;
    			num = atof(ptr);
    			data= data + factor_m * num;
    			factor_m = factor_m * 10;
    		}
    

    Das gleiche mache ich dann mit den Zahlen hinter dem Punkt. Wenn ein "E" auftaucht springe ich aus der Schrleife.

    for(int o=punkt[n]+1; o<35; o++)
    		{
    			x=cleanCharValues[n][o];
    			ptr = &x;
    			num = atof(ptr);
    
    			if(cleanCharValues[n][o]=='E'){break;}
    			else
    			{
    				factor_d = factor_d * 0.1;
    				data = data  + factor_d * num;
    			}
    		}
    

    Danach adiere ich die Zahlen vor und nahc dem Punk:

    12 + 0.345678 = 12.345678

    Wenn noch ein Minus davor steht mulitpliziere ich alles mit -1 und bei dem "E" verwende ich die pow() Funktion.

    Ich finde das mache ich alles ziemlich umständlich. Das muss doch irgendwie einfacher gehen.


Anmelden zum Antworten