Vorzeichenfehler bei static_cast?



  • Hallo, ich möchte ein Ascii Zeichen in ein int umwandeln. (den Ascii Code anzeigen)

    Bei Ascii-Zeichen, wo das 8. Bit gesetzt wird (also eigentlich kein Ascii mehr), bekomme ich 4294967194123 heraus anstatt dezimal 154.
    Die verwendete Variable ist ein String.

    chartInput.open("logfile.txt", ios::in|ios::binary);
    getline(chartInput, inputRow,'\n');
    cout << "Boeses Zeichen " << inputRow[5] << " " << inputRow[5]+0 << endl;
    unsigned int messageDec[100]={0};
    for(unsigned int convertPosition=0;convertPosition<20;convertPosition++)
    {			messageDec[convertPosition]=static_cast<int>(inputRow[convertPosition]);
    }
    

    messageDec unsigned zu deklarieren hilft nicht. Muss der string unsigned sein?



  • Dein code sieht ziemlich verwirrt aus.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    
            string input;
            cin >> input;
    
            for(int i = 0; i < input.size(); i++) {
                    cout << input[i] << ":\t" << static_cast<unsigned int>(input[i]) << endl;
            }
    
            return 0;
    
    }
    

    So sieht das bei mir aus



  • Selbes Ergebnis.
    Es hilft auch nicht den string auf <unsigned int> zu casten, dann hab ich eben die "4294967194123" statt der -104.

    Irgendwie müsste ich den string als unsigned deklarieren. Bei char geht das ja, aber bei String??



  • Bei strings geht's auch, sieht nur etwas komplizierter aus:

    typedef basic_string<unsigned char> ustring;
    

    (Achtung: für die Zusammenarbeit zwischen diesen ustring und den normalen IO-Streams mußt du selber sorgen)


Anmelden zum Antworten