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
번호를 붙이다만약**endptr
null이 아니라 첫 번째 비자리 문자를 가지고 있음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
(다른 답변과 같이).
'programing' 카테고리의 다른 글
Java 파일 크기 가져오기 (0) | 2022.05.02 |
---|---|
서명되지 않은 정수 오버플로가 정의된 동작은 정의되지만 서명된 정수 오버플로는 정의되지 않는 이유는? (0) | 2022.05.02 |
C에서 인쇄()와 스캔()를 위해 매번 데이터 유형을 지정해야 하는 이유는? (0) | 2022.05.02 |
VueJs + Element UI: photo el 선택으로 기본값을 설정하는 방법? (0) | 2022.05.02 |
관찰자는 자바 9에서 더 이상 사용되지 않는다.그거 말고 뭘 쓸까? (0) | 2022.05.02 |