¿Hay alguna forma de convertir un carácter en un número entero en C?
Por ejemplo, de '5'
a 5?
c
type-conversion
Fluir
fuente
fuente
Reste '0' así:
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ón5.2.1/3
del borrador C99 ). Lo mismo cuenta para C ++.fuente
Si, por alguna loca coincidencia, desea convertir una cadena de caracteres en un número entero, ¡también puede hacerlo!
val
ahora es 1024. Aparentementeatoi()
está bien, y lo que dije antes solo se aplica a mí (en OS X (tal vez (inserte aquí la broma de Lisp))). Escuché que es una macro que se asigna aproximadamente al siguiente ejemplo, que usastrtol()
una función de propósito más general para hacer la conversión en su lugar:strtol()
funciona así:Se convierte en
*str
along
, tratándolo como si fuera unbase
número base . Si**endptr
no es nulo, contiene el primer carácter que no es un dígitostrtol()
encontrado (pero a quién le importa eso).fuente
itoa_s()
.Reste char '0' o int 48 así:
Explicación: Internamente funciona con valor ASCII . De la tabla ASCII, el valor decimal del carácter 5 es 53 y 0 es 48 . Entonces 53 - 48 = 5
O
Eso significa que si deduce 48 de cualquier carácter numérico, convertirá el número entero automáticamente.
fuente
fuente
numeralChar - '0'
ya es de tipoint
, por lo que no necesita el yeso. Incluso si no fuera así, el yeso no es necesario.Para convertir el dígito de carácter al entero correspondiente. Haz lo que se muestra a continuación:
La lógica detrás del cálculo anterior es jugar con valores ASCII. El valor ASCII del carácter 8 es 56, el valor ASCII del carácter 0 es 48. El valor ASCII del entero 8 es 8.
Si restamos dos caracteres, la resta ocurrirá entre ASCII de caracteres.
fuente
Si es solo un solo carácter 0-9 en ASCII, entonces 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á suficiente:
** no olvide verificar el estado (que debería ser 1 si funcionó en el caso anterior).
Pablo.
fuente
fuente
Cuando necesito hacer algo como esto, horneo previamente una matriz con los valores que quiero.
Entonces la conversión es fácil
Este es básicamente el enfoque adoptado por muchas implementaciones de la biblioteca ctype. Puede adaptar esto trivialmente para que funcione también con dígitos hexadecimales.
fuente
Mira esto,
por solo 0,1,2, ...., E, F.
fuente
Solo usa la
atol()
función:fuente
Si su dígito está, digamos,
'5'
en ASCII, se representa como el número binario0011 0101
(53). Cada dígito tiene los cuatro bits más altos0011
y los 4 bits más bajos representan el dígito en bcd. Así que lo hacespara obtener los 4 bits más bajos, o lo que es lo mismo, el dígito. En asm, usa
and
operación en lugar desub
(como en las otras respuestas).fuente
'5'
es 53 (00110101
)Aquí hay funciones auxiliares que permiten convertir dígitos en char a int y viceversa:
fuente
función de uso: atoi para matriz a entero, atof para matriz a tipo flotante; o
fuente
Lo convertiría en un int (o flotante o doble o lo que sea que quiera hacer con él) y lo almacenaría en otra variable.
fuente