Hex Methode



  • mach's doch ungefähr so:

    long value;
    if (*term == 'h' || *term == 'H')
       value = strtol (term+1, 0, 16);
    else
       value = strtol (term, 0, 10);
    

    🙂



  • ~fricky schrieb:

    mach's doch ungefähr so:

    long value;
    if (*term == 'h' || *term == 'H')
       value = strtol (term+1, 0, 16);
    else
       value = strtol (term, 0, 10);
    

    🙂

    strtol ... ok nie von gehört 😃 ma gucken 🙂
    danke erstmal für den ersten Ansatz :xmas1:



  • verstehe nicht ganz wie ich das in meine vorhandene Methode einbauen soll/muss?

    oder nur die 5 Zeilen? das klappt ja nicht so...



  • probier mal das:

    long get_value (char *term)
    {
    	if (*term == 'h' || *term == 'H')
    	   return strtol (term+1, 0, 16);
    	return strtol (term, 0, 10); 
    }
    
    void main (void)
    {
      printf ("%d\n", get_value ("Hff"));
      printf ("%d\n", get_value ("255"));
    }
    

    🙂



  • Dein Beispiel geht bestimmt... nur nicht auf mein Beispiel anwendbar glaube ich... jedenfalls hab ich es bis jetzt noch nicht hingefuckelt bekommen.

    if (*term == 'H' ) 
    			return berechne(my_hex(term));
    
    char *  my_hex(char * term)
    {
        if (*term == 'h' || *term == 'H')
    	{
    		return berechne(strtol(term+1, 0, 16));
    	}
    	else
    	{
    		return berechne(strtol(term, 0, 10));
    	}
    }
    

    return 'long' kann nicht in Char * umgewandelt werden... ist die Fehlermeldung.



  • ^^wieso brauchst du's als char*? naja, kannst ja mit sprintf oder sowas wieder einen string daraus machen.
    🙂



  • Das ist se jetzt erstmal... das mit strtol und so ... klappt bzw versteh ich nicht...

    char * my_hex(char* dez, const char * hex)
    {
    	int stellenwert = 0;
    	double basis = 16;
    	double merk = ' ';
    	for(int i = 0; hex[i] != '\0';i++)
    	{
    		dez[i] = hex[i];
    
    		if (hex[i] == 'h' || hex[i] == 'H')
    		{
    			do
    			{
    				stellenwert = stellenwert + 1;
    				j++;
    
    			}while(isxdigit(hex[j]));
    
    				if (isdigit(hex[i]))
    					merk = hex[i];
    				else if (hex[i] == 'A' || hex[i] == 'a' )
    					merk = 10;
    				else if (hex[i] == 'B' || hex[i] == 'b' )
    					merk = 11;
    				else if (hex[i] == 'C' || hex[i] == 'c' ) 
    					merk = 12;
    				else if (hex[i] == 'D' || hex[i] == 'd' )
    					merk = 13;
    				else if (hex[i] == 'E' || hex[i] == 'e' )
    					merk = 14;
    				else if (hex[i] == 'F' || hex[i] == 'f' )
    					merk = 15;
    
    				dez[i] = merk * pow(basis, stellenwert);
    
    				stellenwert = stellenwert -1;
    		}
    		else
    		{
    			dez[i] = hex[i];
    		}
    		return dez;
    	}
    }
    

    Die Lösung geht aber auch nicht... noch nicht sollte ich vielleicht saGEN denn die Hoffnung stirbt zuletzt....mhhh

    was ist da falsch? -.- verstehs nicht



  • Virokams schrieb:

    was ist da falsch? -.- verstehs nicht

    lass es doch mal im debugger laufen (einzelschritt) und verfolge den ablauf, schau dir variableninhalte an usw. dann siehste ja, wo's vom erwarteten verhalten abweicht.
    🙂



  • ~fricky schrieb:

    Virokams schrieb:

    was ist da falsch? -.- verstehs nicht

    lass es doch mal im debugger laufen (einzelschritt) und verfolge den ablauf, schau dir variableninhalte an usw. dann siehste ja, wo's vom erwarteten verhalten abweicht.
    🙂

    tu ich kann dir sogar sagen wo was nicht stimmt ... und zwar kriegt dez[i] nichts übergeben wo ich

    erg = merk * pow(basis, stellenwert);
    				dez[i] = erg;
    

    mache...
    dann ist das natürlich falsch...

    sonst fällt mir auch nichts mehr auf und an bzw ab oder was noch alles fallen kann bin verzweifelt 2 Tage für sowat ist unrealistisch und scheiße und das kurz vorm Urlaub 😡 :xmas1:

    bin entteuscht von mir 😃 😞 :xmas2: :xmas1:



  • Virokams schrieb:

    und zwar kriegt dez[i] nichts übergeben wo ich

    erg = merk * pow(basis, stellenwert);
    				dez[i] = erg;
    

    mache...
    dann ist das natürlich falsch...

    was heisst 'nichts übergeben'?. wird dez[i] auf den wert gesetzt, der vorher auch schon drin war? ist 'erg' denn richtig? hat 'i' den erwarteten wert? das kann doch nicht so schwer sein...
    🙂



  • oder ist 'merk' immer 0?
    🙂



  • ~fricky schrieb:

    oder ist 'merk' immer 0?
    🙂

    Ich gebe Zb: H10 ein also dezimal 16 so:

    er geht durch findet H geht durch stelwert auf 3 geht weiter findet 1 also merk wird auch zur 1 das klappt aber erg wird dann zu 256 ... dez bleib leer

    im 2. Durchgang Dez Leer erg wird 0..

    return

    scheibenkleister... 😡

    das kann doch nicht so schwer sein...

    das Denke ich mir auch schon die ganze Zeit :xmas1:



  • 'dez' zeigt doch auf 'char' und merk * pow(basis, stellenwert) ergibt ein 'double'. das kann noch nicht mal kompilieren (ohne cast). ausserdem verwendet du eine variable 'j', die aber nirgends angelegt wurde. wenn's probleme gibt, dann nicht nur wegen des codes, sondern wohl auch, weil der compiler nix taugt.
    🙂



  • ok ok erstmal danke das du dir mit mir die Rübe zermürbst...

    int j = i ... ist doch deklariert bei mir

    if (hex[i] == 'h' || hex[i] == 'H')
    		{
    			int j = i;
    			do
    			{
    				stellenwert = stellenwert + 1;
    				j++;
    
    			}while(isxdigit(hex[j]));
    		}
    

    das mit dez[i] versteh ich nicht ganz ... eigentlich dachte ich das er auf den Adressbereich von dez[an position i] die Zahl reinpacken könnte. Ok wohl kleiner denkfehler weil im nächsten Durchgang dann i eins höher geht dann hätte ich 2 verscheidene Zahlen... deshalb muss ich das wohl irgendwie zu einem Erg. ausrechnen und DAS dann an die stelle wo H10 stand einfügen und zurückgeben... so war jedenfals meine denkweise... hab ich wohl nicht ganz umgesetzt... mir fällt aber auch momentan nicht ein wie ich es besser machen kann/muss ... stehe voll aufm Schlauch weil ich mich aufrege... 😡



  • Virokams schrieb:

    int j = i ... ist doch deklariert bei mir

    aber nicht im letzten posting auf der vorherigen seite.

    Virokams schrieb:

    ...mir fällt aber auch momentan nicht ein wie ich es besser machen kann/muss ... stehe voll aufm Schlauch weil ich mich aufrege...

    dann nimm doch fertige funktionen, wie strtol/strtoul oder sowas. hab' ich doch schon mal vorgeschlagen.
    🙂



  • Virokams schrieb:

    ...mir fällt aber auch momentan nicht ein wie ich es besser machen kann/muss ... stehe voll aufm Schlauch weil ich mich aufrege...

    dann nimm doch fertige funktionen, wie strtol/strtoul oder sowas. hab' ich doch schon mal vorgeschlagen.
    :)[/quote]

    damit hab ich ja versucht rumzufuchteln...


Anmelden zum Antworten