String in Hex ;-)



  • Guten Morgen,

    viele werden schon garnicht mehr hier reinschauen, von daher ist der Titel eigentl. doof gewählt... Aber ich fand's jetzt irgendwie lustig. Ich will hier nur mal ein paar Meinungen einholen, nicht fragen wie ich aus nem String-Element einen Hex-Wert mache (denn es ist ja eigentl schon ein Hex-Wert). Und darum geht es:
    Der Benutzer gibt in einem Edit-Feld einen Minuten-Wert ein (1-60). Es wird mit Hilfe der Methoden IsDelimiter und Length die Gültigkeit der Eingabe geprüft. Ist die Eingabe gültig, wird der Wert in ein unsigned char - Array geschrieben:

    unsigned short Index= (Edit->Tag-1001);
    TmpStr= Edit->Text;
    usLength= (unsigned int)TmpStr.Length();
    
    switch(usLength)
    {
    	case 0:
    			bFehler= 1;
    			Edit->Color= clRed;
    			break;
    	case 1:
    			if(TmpStr.IsDelimiter("123456789", 1))
    			    ucArray[Index]= StrToInt(TmpStr);
    			else
    			{	bFehler=1;	Edit->Font->Color= clRed;	}
    			break;
    	case 2: 
                if(TmpStr.IsDelimiter("123456", 1) && TmpStr.IsDelimiter("0123456789", 2))
    			{
    				if((TmpStr.IsDelimiter("6", 1)) && (!TmpStr.IsDelimiter("0", 2)))	// Fehlererkenng. 61-69
    					{	bFehler= 1;	Edit->Font->Color= clRed;	break;	}
    				ucArray[Index]= (StrToInt(TmpStr[1])*10);
    				ucArray[Index]+= StrToInt(TmpStr[2]);
    			}
    			else
    			{	bFehler=1; Edit->Font->Color= clRed;	}
    			break;
    	default: 
                bFehler= 1;
    		    Edit->Font->Color= clRed;
    }
    

    Da ich dazu neige Dinge unnötig kompliziert zu machen, möchte ich gern eure Meinung zu dieser Lösung wissen.

    Edit: Kleine Schönheits-OP



  • int TmpInt=StrToIntDef(Edit->Text,0);
    if (TmpInt<1 || TmpInt>60)
    {
     bFehler=1;
     Edit->Font->Color=clRed;
    }
    else ucArray[Edit->Tag-1001]=static_cast<unsigned char>(TmpInt);
    

    Soweit ich das überblicke, müsste der Code eigentlich genau dasselbe machen.
    Was das aber mit Hexwerten zu tun hat, will mir nicht ganz einleuchten.



  • Nur kurz zu den Hex-Werten. Wenn ich etwas per serieller Schnittstelle übertragen will, muss ich zB. aus AnsiString "55" (0x05,0x05) sowas machen: unsigned char 0x37.



  • Allerdings sind Hexadezimalzahlen ja nur eine von vielen Darstellungsmöglichkeiten einer Zahl im Speicher, genauso kann man statt 0x37 ja auch 55 oder 00110111[2] sagen.
    Ich ging zuerst davon aus, dass du wieder einen String mit Hex-Darstellung erstellen wolltest (also z.B. "A" zu "41"), deswegen war es mir nicht ganz klar.
    Edit: Also, AnsiString "55" wäre auch 0x35 0x35, nicht 0x05 0x05!



  • Ok, stimmt ("5" = 0x35). Also ums nochmal korrekt auszudrücken: Ich muss aus einem String mit einem oder zwei Elementen ein char machen. 😉

    Edit: StrToIntDef ist natürlich besser, habs mir mal angeschaut. Da fällt mir so eine nervige Verbraucherinformation ein: ...entdecke die Möglichkeiten! 😃


Anmelden zum Antworten