595 Stimmen

Umwandlung von char in int in C und C++

Wie konvertiere ich eine char zu einer int in C und C++?

18voto

herohuyongtao Punkte 47389

Verwenden Sie static_cast<int> :

int num = static_cast<int>(letter); // if letter='a', num=97

Editar: Sie sollten wahrscheinlich versuchen, die Verwendung von (int)

int num = (int) letter;

auschecken Warum static_cast<int>(x) anstelle von (int)x verwenden? für weitere Informationen.

12voto

Henke Punkte 282

Ich habe absolut null Kenntnisse in C, sondern für ein einfaches Parsing:

char* something = "123456";

int number = parseInt(something);

...das hat bei mir funktioniert:

int parseInt(char* chars)
{
    int sum = 0;
    int len = strlen(chars);
    for (int x = 0; x < len; x++)
    {
        int n = chars[len - (x + 1)] - '0';
        sum = sum + powInt(n, x);
    }
    return sum;
}

int powInt(int x, int y)
{
    for (int i = 0; i < y; i++)
    {
        x *= 10;
    }
    return x;
}

8voto

T.E.D. Punkte 42630

Das hängt davon ab, was Sie mit "konvertieren" meinen.

Wenn Sie eine Reihe von Zeichen haben, die eine ganze Zahl darstellen, wie z. B. "123456", dann gibt es zwei typische Möglichkeiten, dies in C zu tun: Verwenden Sie eine spezielle Konvertierung wie atoi() ou strtol() oder die Allzweckwaffe sscanf() . C++ (das in Wirklichkeit eine andere Sprache ist, die sich als Upgrade tarnt) fügt eine dritte hinzu, Stringstreams.

Wenn Sie meinen, dass Sie das genaue Bitmuster in einem Ihrer int zu behandelnden Variablen als char das ist einfacher. In C sind die verschiedenen Integer-Typen eher eine Geisteshaltung als tatsächlich separate "Typen". Fangen Sie einfach an, sie zu benutzen, wo char s verlangt werden, und es sollte alles in Ordnung sein. Sie könnten eine explizite Konvertierung benötigen, damit der Compiler gelegentlich aufhört zu jammern, aber alles, was das tun sollte, ist, alle zusätzlichen Bits über 256 hinaus fallen zu lassen.

4voto

Gurom Punkte 31

Ich empfehle, die folgende Funktion zu verwenden:

/* chartoint: convert char simbols to unsigned int*/
int chartoint(char s[])
{

    int i, n;
    n = 0;
    for (i = 0; isdigit(s[i]); ++i){
        n = 10 * n + (s[i] - '0');
    }
    return n; 
}

Das Ergebnis der Funktion kann mit überprüft werden:

printf("char 00: %d \r\n", chartoint("00"));
printf("char 01: %d \r\n", chartoint("01"));
printf("char 255: %d \r\n", chartoint("255"));

3voto

Cheers and hth. - Alf Punkte 138555

Vermutlich wollen Sie diese Konvertierung für die Verwendung von Funktionen aus der C-Standardbibliothek.

In diesem Fall tun Sie (C++-Syntax)

typedef unsigned char UChar;

char myCppFunc( char c )
{
    return char( someCFunc( UChar( c ) ) );
}

Der Ausdruck UChar( c ) konvertiert zu unsigned char um negative Werte loszuwerden, die, außer bei EOF, von den C-Funktionen nicht unterstützt werden.

Dann wird das Ergebnis dieses Ausdrucks als aktuelles Argument für eine int formales Argument. Hier werden Sie automatisch befördert zu int . Alternativ können Sie diesen letzten Schritt auch explizit schreiben, etwa so int( UChar( c ) ) aber ich persönlich finde das zu langatmig.

Prost & hth.,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X