2011-03-16 31 views

Respuesta

14

¿Qué hay de:

int a_as_int = (int)'a'; 
+9

realidad 'a' en C++ ya diferencia de C es int. – UmmaGumma

+2

Añadiré la referencia necesaria al argumento: http://stackoverflow.com/questions/433895/why-are-c-character-literals-ints-instead-of-chars – xanatos

1

Un valor caracter en C es convertir implícitamente a un int. Por ejemplo, char c; ... printf("%d", c) imprime el valor ASCII decimal de c, y int i = c; pone el valor entero ASCII de c en i. También puede convertirlo explícitamente con (int)c. Si se refiere a otra cosa, como convertir un dígito ASCII a un int, sería c - '0', que implícitamente convierte c en un int y luego resta el valor ASCII de '0', concretamente 48 (en C, constantes de caracteres como '0' son de tipo int, no char, por razones históricas).

9

¿Está buscando esto:

int c = some_ascii_character; 

O simplemente convertir sin asignación:

(int)some_aschii_character; 
+0

Estaba buscando el primero, pero el segundo funciona igual de bien. –

1

¿Se refiere al valor ordinal ASCII? Trate la conversión de tipos como éste:

int x = 'a'; 
+0

@Jim Balter Disculpe si es obvio, pero me preguntaba cómo se trata de C++ en lugar de c. ¿Es por la terminología o me falta algo? – quasiverse

+0

@quasiverse Mire la edición, es decir, haga clic en el enlace "hace 43 minutos". Tenga en cuenta que mi comentario fue publicado hace 48 minutos. Ten cuidado con esto en general, te morderá en SO. –

+0

Vaya, tonto, esas son las veces que vi cuando publiqué eso, pero por supuesto esos no son los tiempos que la gente verá cuando lo lea. –

1

Como todo el mundo le ha dicho, se puede convertir directamente ... a menos que quería decir algo así como "¿cómo puedo convertir un carácter ASCII extendido a su UTF-16 o UTF 32 valor ". Esta es una pregunta TOTALMENTE diferente (una al menos tan buena). Y bastante difícil, si no recuerdo mal, si está utilizando solo "puro" C. Entonces podría comenzar aquí: https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643

(para ASCII Extended me refiero a una de las muchas "extensiones" del conjunto ASCII. 0-127 caracteres del conjunto ASCII base son directamente convertibles a Unicode, mientras que los 128-255 no son). Por ejemplo, ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1 es una extensión de 8 bits para el conjunto ASCII de 7 bits, o las páginas de códigos (bastante famosas) 437 y 850.

+1

Los caracteres ASCII (0-127) en cualquier formato UTF son idénticos a su representación entera. –

+0

@Chris Pero al menos el 50% de las veces, cuando alguien habla de ASCII, quiere decir "ASCII extendido" ... Pero sí, sería interesante poner esta nota en la respuesta. Gracias. – xanatos

+0

Los caracteres ASCII varían en valor de 0 a 127, por lo que convertirlos a UTF-16 o UTF-32 es solo un elenco. Quizás quiera decir algo diferente, como convertir varias codificaciones de bytes como UTF-8, ISO 8859-1, etc. –

3

Acepto a Ashot y Cwan, pero tal vez quiera convertir un cifrado cifrado como '7' en un int como 7?

Entonces a recomendaría:

char seven = '7'; 
int i = seven - '0'; 

o, tal vez se obtiene una advertencia,

int i = (int) (seven - '0'); 

corregido después de los comentarios, gracias.

+0

No hay advertencia para eso en C. –

+0

Si hubo una advertencia, es más probable que la obtengas para la primera línea, que convierte un tipo más grande (''7'' es una int) a un tipo más pequeño (char) –

0

No es posible con la biblioteca estándar C99, a menos que escriba manualmente un mapa de constantes de caracteres en el correspondiente valor int ASCII.

Las constantes de caracteres en C como 'a' no están garantizadas como ASCII.

C99 solo ofrece algunas garantías sobre esas constantes, p. que digits be contiguous.

La palabra ASCII sólo aparece en el C99 N1256 standard draft en las notas de pie de página, y el pie de nota 173) dice:

En una aplicación que utiliza los siete bits de EE.UU. conjunto de caracteres ASCII, los caracteres de impresión son los cuya los valores se encuentran desde 0x20 (espacio) hasta 0x7E (tilde); los caracteres de control son aquellos cuyos valores se encuentran entre 0 (NUL) y 0x1F (EE. UU.) y el carácter 0x7F (DEL).

lo que implica que ASCII no es la única posibilidad

1

Uso del ASCII a entero función atoi():

#include <stdlib.h> 

int num = atoi("23"); 
Cuestiones relacionadas