una numeros numero letras letra lenguaje entero convertir como codigo caracteres caracter cadena c type-conversion

numeros - Convierte un dígito de carácter en el entero correspondiente en C



convertir letra a numero c (13)

Cuando necesito hacer algo como esto, preparo una matriz con los valores que quiero.

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

Entonces la conversión es fácil

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

Este es básicamente el enfoque adoptado por muchas implementaciones de la biblioteca ctype. También puedes adaptarlo trivialmente para trabajar con dígitos hexadecimales.

¿Hay alguna manera de convertir un personaje a un número entero en C?

Por ejemplo, de ''5'' a 5?


Lo convertirías en un int (o float o double o lo que sea que quieras hacer con él) y lo almacenarás en una variable anoter.


Para convertir el dígito del personaje al entero correspondiente. Haz lo que se muestra a continuación:

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

La lógica detrás del cálculo anterior es jugar con valores ASCII. El valor ASCII del caracter 8 es 56, el valor ASCII del caracter 0 es 48. El valor ASCII del entero 8 es 8.

Si restamos dos caracteres, la resta ocurrirá entre los caracteres ASCII.

int i = 56 - 48; i = 8;


Reste ''0'' de esta manera:

int i = c - ''0'';

El estándar C garantiza que cada dígito en el rango ''0''..''9'' es uno mayor que su dígito anterior (en la sección 5.2.1/3 del borrador C99 ). Lo mismo cuenta para C ++.


Reste el carácter ''0'' o int 48 de esta manera:

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

O

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


Según otras respuestas, esto está bien:

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

Además, para la comprobación de errores, es posible que desee verificar que isdigit (c) sea verdadero primero. Tenga en cuenta que no puede hacer lo mismo de manera completamente portátil para las letras, por ejemplo:

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

El estándar garantiza que los valores de char para los dígitos ''0'' a ''9'' son contiguos, pero no ofrece garantías para otros caracteres, como las letras del alfabeto.


Si se trata de un solo carácter 0-9 en ASCII, restar el valor del carácter cero ASCII del valor ASCII debería funcionar bien.

Si desea convertir números más grandes, lo siguiente será:

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

** no se olvide de verificar el estado (que debe ser 1 si funcionó en el caso anterior).

Pablo.


Si, por alguna loca coincidencia, quieres convertir una cadena de caracteres en un entero, ¡también puedes hacerlo!

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

val es ahora 1024. Aparentemente atoi() está bien, y lo que dije antes solo se aplica a mí (en OS X (tal vez (inserte el chiste de Lisp aquí))). He oído que es una macro que se aproxima aproximadamente al siguiente ejemplo, que usa strtol() , una función más general, para hacer la conversión:

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

strtol() funciona así:

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

Convierte *str a un long , tratándolo como si fuera un número base de base . Si **endptr no es nulo, contiene el primer carácter no- strtol() encontrado (pero a quién le importa eso).


Simplemente use la función atol() :

#include <stdio.h> #include <stdlib.h> int main() { const char *c = "5"; int d = atol(c); printf("%d/n", d); }


use function: atoi para array a entero, atof para array a float type; o

char c = ''5''; int b = c - 48; printf("%d", b);


Mira esto,

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

por solo 0,1,2, ...., E, F.


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 !!! }


char numeralChar = ''4''; int numeral = (int) (numeralChar - ''0'');