문제
캐릭터를 C의 정수로 변환하는 방법이 있습니까?
예를 들어 '5'
5로?
해결책
다른 답변에 따라 괜찮습니다.
char c = '5';
int x = c - '0';
또한 오류 확인의 경우 ISDIGIT (C)가 먼저 확인할 수 있습니다. 예를 들어 편지에 대해 완전히 동일하게 할 수는 없습니다.
char c = 'b';
int x = c - 'a'; // x is now not necessarily 1
표준은 숫자 '0'~ '9'의 char 값이 연속적이지만 알파벳 문자와 같은 다른 문자를 보장하지 않음을 보장합니다.
다른 팁
다음과 같이 '0'을 빼십시오.
int i = c - '0';
C 표준은 범위의 각 숫자를 보장합니다 '0'..'9'
이전 숫자보다 크다 (섹션에서 5.2.1/3
의 C99 초안). C ++에 대해 동일한 카운트입니다.
미친 우연의 일치로, 당신은 끈 정수에 캐릭터의 캐릭터, 당신도 그렇게 할 수 있습니다!
char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int
val
이제 1024입니다. 분명히 atoi()
괜찮습니다. 이전에 내가 말한 것은 나에게만 적용됩니다 (OS X에서 (아마도 LISP 농담 삽입))). 나는 다음 예제에 대략적으로지도를하는 매크로라고 들었습니다. strtol()
, 대신 변환을 수행하는보다 일반적인 목적 기능 :
char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long
strtol()
다음과 같이 작동합니다.
long strtol(const char *str, char **endptr, int base);
그것은 변환합니다 *str
a long
, 그것을 기지 인 것처럼 취급합니다 base
숫자. 만약에 **endptr
NULL이 아니며 첫 번째가 아닌 캐릭터가 있습니다 strtol()
발견 (그러나 누가 그것을 걱정하는 사람).
char '0'또는 int 48을 다음과 같이 빼냅니다.
char c = '5';
int i = c - '0';
설명 : 내부적으로 작동합니다 ASCII 값. ASCII 테이블에서 문자의 소수 가치 5는 53입니다 그리고 0은 48입니다. 그래서 53 - 48 = 5
또는
char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
그것은 당신이 공제하는 경우를 의미합니다 48 모든 숫자 문자에서 정수를 자동으로 변환합니다.
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
문자 숫자를 해당 정수로 변환합니다. 아래 그림과 같이하십시오.
char c = '8';
int i = c - '0';
위의 계산의 논리는 ASCII 값으로 재생하는 것입니다. 문자 8의 ASCII 값은 56, 문자 0의 ASCII 값은 48입니다. 정수 8의 ASCII 값은 8입니다.
두 문자를 빼면 ASCII의 문자 사이에서 뺄셈이 발생합니다.
int i = 56 - 48;
i = 8;
ASCII에서 단일 문자 0-9라면 ASCII 값에서 ASCII Zero 문자의 값을 빼면 잘 작동합니다.
더 많은 숫자를 변환하려면 다음이 할 것입니다.
char *string = "24";
int value;
int assigned = sscanf(string, "%d", &value);
** 상태를 확인하는 것을 잊지 마십시오 (위의 경우에 작동 한 경우 1이어야 함).
폴.
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 !!!
}
이와 같은 일을해야 할 때 원하는 값으로 배열을 사전 처리합니다.
const static int lookup[256] = { -1, ..., 0,1,2,3,4,5,6,7,8,9, .... };
그러면 변환이 쉽습니다
int digit_to_int( unsigned char c ) { return lookup[ static_cast<int>(c) ]; }
이것은 기본적으로 CTYPE 라이브러리의 많은 구현에 의해 취한 접근법입니다. 당신은 이것을 육각 숫자로도 작업하도록 사소하게 적응할 수 있습니다.
이거 확인해
char s='A';
int i = (s<='9')?(s-'0'):(s<='F')?((s-'A')+10):((s-'a')+10);
0,1,2, ...., e, f.
그냥 사용하십시오 atol()
기능:
#include <stdio.h>
#include <stdlib.h>
int main()
{
const char *c = "5";
int d = atol(c);
printf("%d\n", d);
}
당신의 숫자가 '5'
, ASCII에서는 이진 번호로 표시됩니다. 0011 0101
(53). 모든 숫자는 4 비트가 가장 높습니다 0011
그리고 가장 낮은 4 비트는 BCD의 숫자를 나타냅니다. 그래서 당신은 그냥합니다
char cdig = '5';
int dig = cdig & 0xf; // dig contains the number 5
가장 낮은 4 비트를 얻으려면, 또는 그와 같은 숫자를 얻으려면. ASM에서는 사용합니다 and
대신 작동 sub
(다른 대답에서와 같이).
사용 기능 : Atoi 배열에서 정수를위한 Atoi, Atrof thray to float 유형; 또는
char c = '5';
int b = c - 48;
printf("%d", b);
당신은 그것을 int (또는 float 또는 double 또는 당신이하고 싶은 것)에 그것을 캐스팅하고 그것을 Anoter 변수에 보관할 것입니다.