이번에는 16진수(hexadecimal)를 10진수로 변환해주는 함수를 보자. 아래 코드와 같이 구현하면 처리가 되는데, 값이 너무 커지면 값이 보장되지 않는다. int는 4bytes이고 32bits이다. 16진수로는 4bytes가 한 문자(0,1, ...., A)의 값을 가지므로 총 8자리의 16진수까지만 (unsigned) int로 변환이 가능하다.
#include <iostream> using namespace std; unsigned int htoi(string hex) { int len = hex.length(); unsigned int val = 0; for (int i = 0; i < len; i++) { val <<= 4; char tmp1 = hex.at(i); int tmp2; if (tmp1 >= 'A') tmp2 = tmp1 - 'A' + 10; else tmp2 = tmp1 - '0'; val += tmp2; } return val; } main() { cout << htoi("0") << endl; cout << htoi("3") << endl; cout << htoi("AB") << endl; cout << htoi("A3") << endl; cout << htoi("11") << endl; cout << htoi("AB13") << endl; }뭔가 좀 더 깔끔하게는 할 수 없을까? 또한, 16진수의 음수 표현은 어떻게 되는가?
'[아는게 힘이다] > [프로그래밍]' 카테고리의 다른 글
[CS] 비트 매스크(Bit Mask) (2) | 2010.02.21 |
---|---|
[CS] 반복되지 않는 첫번째 문자를 찾아라 (12) | 2010.02.19 |
[CS] 배열에서 두번째로 작은 수를 구하기 (2) | 2010.02.18 |
[CS] c++에서 실수형 처리 (0) | 2010.02.12 |