programing

C에서 문자 숫자를 해당하는 정수로 변환

prostudy 2022. 5. 2. 20:30
반응형

C에서 문자 숫자를 해당하는 정수로 변환

C에서 정수로 문자를 변환할 수 있는 방법이 있는가?

예를 들어, from.'5'5시까지요?

다른 응답에 따르면 다음과 같이 해도 괜찮다.

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

또한 오류 검사의 경우 먼저 isdigits(c)가 참인지 확인하는 것이 좋다.예를 들어 다음과 같은 문자에 대해 완전히 포트리스 방식으로 동일한 작업을 수행할 수 없다는 점에 유의하십시오.

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

표준은 숫자 '0'에서 '9'까지의 문자 값이 연속적이라는 것을 보증하지만 알파벳 문자 같은 다른 문자에 대해서는 보증하지 않는다.

이렇게 '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에 (아마도 여기에 (리스프 농담 삽입)).대략 다음 예에 매핑하는 매크로라고 들었는데, 그 예는 다음과 같다.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완전히long, 그것을 베이스인 것처럼 취급한다.base번호를 붙이다만약**endptrnull이 아니라 첫 번째 비자리 문자를 가지고 있음strtol()발견(그러나 누가 그것에 대해 신경 쓰는가)

문자 숫자를 해당하는 정수로 변환하려면 다음과 같이 하십시오.아래 그림과 같이 수행하십시오.

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

위의 계산 뒤에 있는 논리는 ASCII 값으로 플레이하는 것이다.문자 8의 ASCII 값은 56이고 문자 0의 ASCII 값은 48이다.정수 8의 ASCII 값은 8이다.

우리가 두 문자를 빼면, ASCII 문자 사이에 감산이 일어날 것이다.

int i = 56 - 48;   
i = 8;

다음과 같이 문자 '0' 또는 int 48을 빼십시오.

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

설명:내부적으로 ASCII 값과 함께 작동한다.ASCII 테이블에서 문자 5의 소수점 값은 53이고 0은 48이다.따라서 53 - 48 = 5

OR

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

즉, 어떤 숫자에서든 48을 빼면 정수가 자동으로 변환된다는 뜻이다.

다음은 char의 숫자를 in 또는 int로 변환할 수 있는 도우미 기능이다.

int toInt(char c) {
    return c - '0';
}

char toChar(int i) {
    return i + '0';
}

그냥 사용하라.atol()함수:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    const char *c = "5";
    int d = atol(c);
    printf("%d\n", d);

}

int(또는 float or float or double or want to do you want to do with it anoter)에 캐스팅하여 양극 변수에 저장한다.

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

ASCII에서 0-9의 단일 문자일 경우 ASCII 값에서 ASCII 0 문자 값을 빼는 것이 효과적이어야 한다.

더 큰 숫자를 변환하려면 다음 작업을 수행하십시오.

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 라이브러리의 많은 구현에 의해 취해진 접근방식이다.당신은 이것을 16진수로 동작하도록 사소한 방법으로 조정할 수도 있다.

이거 봐봐.

char s='A';

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

0,1,2,....,E,F에 대해서만.

만약 당신의 자리가, 예를 들어,'5' , ASCII는 수정이 하다.0011 0101는 가장 (53)를 . 모든 자릿수는 가장 높은 4비트를 가진다.0011그리고 가장 낮은 4비트는 숫자를 BCD로 나타낸다.그러니까 넌 그냥 해.

char cdig = '5';
int dig = cdig & 0xf; // dig contains the number 5

가장 낮은 4비트를 얻거나, 같은 숫자를 얻는다.를 사용한다and대승적 sub(다른 답변과 같이).

참조URL: https://stackoverflow.com/questions/628761/convert-a-character-digit-to-the-corresponding-integer-in-c

반응형