Wie konvertiere ich eine char
zu einer int
in C und C++?
Antworten
Zu viele Anzeigen?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.
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;
}
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.
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"));
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.,