string Zeichen in einen Int umwandeln mit DOS Zeichensatz



  • UPS
    Das ergebnis ist: 59344216
    Das sollte aber nicht sein ^^

    Ich dachte eher an eine 72

    Wie kommt das denn, ist das hier der falsche Zeichensatz ? Möglicherweise UNICODE ?



  • Tim06TR schrieb:

    UPS
    Das ergebnis ist: 59344216
    Das sollte aber nicht sein ^^

    Ich dachte eher an eine 72

    Wie kommt das denn, ist das hier der falsche Zeichensatz ? Möglicherweise UNICODE ?

    das ergebnis wofür ist 59344216?

    jperl



  • H hab ich vergessen



  • ich weiß ja nicht was du machst, aber das gibt mir 72 aus.

    char c = 'H';
    int i = (int) c;
    std::cout << i << std::endl;
    

    jperl



  • ok dann weiß ich zumindest, dass es nicht daran liegt



  • ähm mit const char* gehts nicht hab ich recht oder unrecht ?
    Könnte daran liegen. Also wie war das noch string in char ?



  • Tim06TR schrieb:

    ähm mit const char* gehts nicht hab ich recht oder unrecht ?
    Könnte daran liegen. Also wie war das noch string in char ?

    hm naja ein const_cast ginge.
    zwar nicht schön aber funktioniert.

    ansonsten ein char* mit stringlänge+1 erzeugen und strcpy verwenden.

    jperl


  • Mod

    Tim06TR schrieb:

    ähm mit const char* gehts nicht hab ich recht oder unrecht ?
    Könnte daran liegen. Also wie war das noch string in char ?

    Ähm, versuchst du etwa einen char* in int umzuwandeln? Du musst den natürlich vorher erst dereferenzieren! Ansonsten hast du dir vorher einfach nur die Speicheradresse ausgeben lassen auf die der char* zeigt.



  • ohhhh

    mit char*

    kommt 1239840
    raus, moment, ich glaub daran liegts nicht, Dev-Cpp liefert das richtige

    MFC Nicht, mist ich glaub hier ist ein Verschub nötig.

    int Num;
    	char c[1];
    	const char* C;
    	if (UseStringList == true)
    	{
    		Num = ZeichenToInt(Zeichen,Parameter[2]);
    	}
    
    	else
    	{
    		MessageBox::Show("PAUSE");
    		C = Zeichen.c_str();
    		strcpy(c,C);
    		Num = (int) c;
    	}
    	std::string debug;
    	std::stringstream NumInterpreta;
    	NumInterpreta << Num;
    	debug=NumInterpreta.str();
    	NumInterpreta.clear();
    	NumInterpreta.str("");
    	String^Output = gcnew String(debug.c_str());
    	richTextBox3->Text = Output;
    

    Was ist hier Falsch ?



  • Num = (int) (*c);
    

    würde ich mal sagen.

    jperl



  • Oh es geht ! 😃
    (adressen zu lesen ist bitter)



  • Einer der Gründe, warum ich die C++-Cast-Operatoren vorziehe.

    Hätte statt

    Num = (int) c;
    

    Folgendes gestanden:

    Num = static_cast<int>(c);
    

    (oder kein Cast), wäre ein Compilerfehler erzeugt worden. Aber durch das Einsetzen des rücksichtslosen C-Casts biegst du hin, was nur geht. 😉



  • const char* c;
    c = (const char*) (&NewNum);
    Result = c;
    

    warum geht das nicht wenn die Zahlen größer als 255 werden ?
    Er gibt mir dann immer 2 Zeichen !



  • Warum castest du einfach, um Compilerfehler zu umgehen? Das ist selten eine Lösung. Und gerade wenn man sich noch so unsicher ist, sollte man keine C-Casts verwenden (es sei denn, man besitzt masochistische Züge).

    Abgesehen davon: Was soll uns der Code sagen? Was ist NewNum ? Was willst du erreichen?



  • Tim06TR schrieb:

    warum geht das nicht wenn die Zahlen größer als 255 werden ?
    Er gibt mir dann immer 2 Zeichen !

    Da char normalerweise als 1-Byte bzw 8-Bit definiert ist, und 256 das Größte ist was man in 8-Bit stopfen kann (2^8) ist selbstverständlich bei 255 Schluß (0-255).

    const char* c;
    c = (const char*) (&NewNum);
    Result = c;
    

    Zeig mal mehr Code. Kann nicht verstehen warum du einem const char-Zeiger die Addresse eines Ints zuweisen möchtest.



  • ok das leuchtet ein.
    Wie ich auf mehr kam, ist mir eh nicht Schlüssig, jetzt habe ich diese
    Faktor ausgeschaltet und NewNum kann maximal 255 sein



  • Wie kann ä -28 sein ???
    bei
    Zeichen = ä

    C = Zeichen.c_str();
    Num = (int) (*C);
    

    Das darf nicht sein, sonst löst mein Prog einen Fehler aus, weil es eine Zahl
    unter 0 nicht verträgt



  • Tim06TR schrieb:

    Wie kann ä -28 sein ???

    Der Typ char kann sich wie signed char und unsigned char verhalten, je nach Implementierung.

    Tim06TR schrieb:

    Das darf nicht sein, sonst löst mein Prog einen Fehler aus, weil es eine Zahl
    unter 0 nicht verträgt

    Dieser Fehler ist natürlich streng geheim, oder wie?

    Zum dritten Mal: Du löst keine Probleme, indem du einfach Casts einsetzt! Dazu müsste man wissen, was man tut, und das ist bei dir offensichtlich nicht der Fall. Wenn du es nicht endlich zu Stande bringst, zu sagen, was du erreichen willst und nicht wie, wird das auch weiterhin so bleiben. Ist es denn wirklich so schwer, ein Problem vernünftig zu beschreiben? 🙄



  • Ich dachte das wäre klar geworden. ALSOOO
    Ich muss ein belibiges Zeichen in eine Zahl umwandeln, wie der Comp das macht ist mir Schnuppe, Hauptsache es kommt immer dasselbe raus und wichtig ist, dass die Zahl größer als 0 Null ist.
    Es ist KEINE MÖGLICHKEIT eine große Tabelle anzulegen, wo steht welches Zeichen welche Zahl ist, dass muss doch auf irgendwie anders gehen.
    Möglichst eine Zahl im Dezimalen System, Binär oder Hex sind aber genauso möglich.

    Die Methode Oben hatte bis auf den Angesprochenen Fehler aber auch gut Funktioniert.

    SO Das nochmal zu dem was ich will.



  • Und was ist genau das Problem an der Lösung auf der ersten Seite?

    char zeichen = 'a';
    int nummer = static_cast<int>(nummer);
    

    (Es ist eigentlich total unnötig zu casten oder überhaupt einen anderen Typ zu nehmen, da char s auch integrale Typen sind. Aber für das Prinzip...)

    Und falls du nur Zahlen grösser als Null willst, nimmst du eben unsigned char .


Anmelden zum Antworten