wake-up-neo.com

Konvertieren Sie eine Zeichenzahl in die entsprechende Ganzzahl in C

Gibt es eine Möglichkeit, ein Zeichen in eine Ganzzahl in C zu konvertieren? 

Zum Beispiel von '5' bis 5?

72
Flow

Wie in allen anderen Antworten ist dies in Ordnung:

char c = '5';
int x = c - '0';

Zur Fehlerprüfung können Sie auch prüfen, ob isdigit (c) zuerst wahr ist. Beachten Sie, dass Sie nicht portabel dasselbe für Buchstaben tun können, zum Beispiel:

char c = 'b';
int x = c - 'a'; // x is now not necessarily 1

Der Standard garantiert, dass die Zeichenwerte für die Ziffern '0' bis '9' zusammenhängend sind, übernimmt jedoch keine Garantie für andere Zeichen wie Buchstaben des Alphabets.

103
Chris

Subtrahieren Sie '0' wie folgt:

int i = c - '0';

Der C-Standard garantiert, dass jede Ziffer im Bereich '0'..'9' um eine Ziffer größer ist als die vorherige Ziffer (in Abschnitt 5.2.1/3 des C99 draft ). Gleiches gilt für C++.

Wenn Sie zufällig einen string von Zeichen in eine Ganzzahl konvertieren möchten, können Sie dies auch tun!

char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int

val ist jetzt 1024. Anscheinend ist atoi() in Ordnung, und was ich zuvor darüber gesagt habe, trifft nur auf mich zu (auf OS X (vielleicht (LISP-Witz hier einfügen)). Ich habe gehört, dass es sich um ein Makro handelt, das grob auf das nächste Beispiel abgebildet ist, das stattdessen strtol() verwendet, eine allgemeinere Funktion, um die Konvertierung durchzuführen:

char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long

strtol() funktioniert so:

long strtol(const char *str, char **endptr, int base);

Es konvertiert *str in eine long und behandelt es so, als wäre es eine Basis base. Wenn **endptr nicht null ist, enthält es das erste nichtstellige Zeichen strtol(), das gefunden wurde (aber wen interessiert das schon).

24
Chris Lutz
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
5
Kevin Conner

Subtrahieren Sie Zeichen '0' oder Int 48 wie folgt:

char c = '5';
int i = c - '0';

OR

char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
5
Arif

Um eine Zeichenstelle in eine entsprechende Ganzzahl umzuwandeln. Gehen Sie wie folgt vor:

char c = '8';                    
int i = c - '0';

Die Logik hinter der obigen Berechnung besteht darin, mit den Werten von ASCII zu spielen. ASCII - Wert von Zeichen 8 ist 56, ASCII - Wert von Zeichen 0 ist 48. ASCII - Wert von Ganzzahl 8 ist 8.

Wenn wir zwei Zeichen subtrahieren, wird zwischen ASCII von Zeichen subtrahiert.

int i = 56 - 48;   
i = 8;
3
Ashish

Wenn es sich nur um ein einzelnes Zeichen 0-9 in ASCII handelt, sollte der Wert des ASCII - Nullzeichens vom ASCII -Wert subtrahiert werden.

Wenn Sie größere Zahlen konvertieren möchten, tun Sie Folgendes:

char *string = "24";

int value;

int assigned = sscanf(string, "%d", &value);

** Vergessen Sie nicht, den Status zu überprüfen (dies sollte 1 sein, wenn es im obigen Fall funktioniert hat).

Paul.

0
Paul W Homer

Überprüfen Sie dies,

char s='A';

int i = (s<='9')?(s-'0'):(s<='F')?((s-'A')+10):((s-'a')+10);

für nur 0,1,2, ...., E, F.

0
Shiva
char chVal = '5';
char chIndex;

if ((chVal >= '0') && (chVal <= '9')) {

    chIndex = chVal - '0';
}
else 
if ((chVal >= 'a') && (chVal <= 'z')) {

    chIndex = chVal - 'a';
}
else 
if ((chVal >= 'A') && (chVal <= 'Z')) {

    chIndex = chVal - 'A';
}
else {
    chIndex = -1; // Error value !!!
}
0
Alphaneo

Wenn Ihre Ziffer beispielsweise '5' ist, wird sie in ASCII als Binärzahl 0011 0101 (53) dargestellt. Jede Ziffer hat die höchsten vier Bits 0011 und die niedrigsten 4 Bits repräsentieren die Ziffer in bcd. Also machst du es einfach

char cdig = '5';
int Dig = cdig & 0xf; // Dig contains the number 5

um die niedrigsten 4 Bits oder, wie auch immer, die Ziffer zu erhalten. In asm verwendet es die and-Operation anstelle von sub (wie in den anderen Antworten).

0
Garmekain

Verwenden Sie einfach die atol()Funktion:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    const char *c = "5";
    int d = atol(c);
    printf("%d\n", d);

}
0
Dylan halls

Wenn ich so etwas tun muss, baue ich ein Array mit den gewünschten Werten vor.

const static int lookup[256] = { -1, ..., 0,1,2,3,4,5,6,7,8,9, .... };

Dann ist die Umstellung einfach

int digit_to_int( unsigned char c ) { return lookup[ static_cast<int>(c) ]; }

Dies ist im Grunde der Ansatz, den viele Implementierungen der ctype-Bibliothek verwenden. Sie können dies trivial anpassen, um auch mit Hex-Ziffern zu arbeiten.

0

Hier sind Hilfsfunktionen, mit denen Sie Ziffern in Zeichen in int und umgekehrt konvertieren können:

int toInt(char c) {
    return c - '0';
}

char toChar(int i) {
    return i + '0';
}
0
Maxim Makhun