문제

캐릭터를 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/3C99 초안). 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 변수에 보관할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top