이번에는 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] 반복되지 않는 첫번째 문자를 찾아라 (3) | 2010/02/19 |
| [CS] 16진수를 10진수로 바꾸어보자 (0) | 2010/02/18 |
| [CS] 배열에서 두번째로 작은 수를 구하기 (2) | 2010/02/18 |
| [CS] c++에서 실수형 처리 (0) | 2010/02/12 |






