| 이전에 포스팅한 GetProfileToString을 통해서, 특정 값을 읽어왔는데 제기럴 Hex 값이었다. Int 값이었으면 atoi를 이용해서 int로 쓰겠는데 왠걸 hex string... 열심히 구글링 해보니 CodeProject에 Sample이 있어 업어왔다.
linux에서 왜 string.h에 strupr이 없는걸까??????? 보안에 문제가 있는 API라서? 쩝....
Set로 움직이는 함수입니다. 꼭 필요한 분들이 있을 것 같습니다.
수정사항이 있으시면 언제든지!!! 피드백 부탁 드립니다.
고운하루 되세요 char* StrUpr( char *str ) { int loop = 0; while( str[loop] != '\0' ) { str[loop] = (char) toupper( str[loop] ); loop++; } return str; }
/* * hex string to int */
int xtoi(char *value) { struct CHexMap { char chr; int value; };
const int HexMapL = 16; CHexMap HexMap[HexMapL] = { {'0', 0}, {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5}, {'6', 6}, {'7', 7}, {'8', 8}, {'9', 9}, {'A', 10}, {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15} };
/* remove space */ int len = strlen(value); for(int i = 0; i < len; i++) { if( *(value+i) == ' ') { value++; } else { break; } }
/* alloc buffer and change upper */ char *mstr = StrUpr(strdup(value)); char *s = mstr; int result = 0; if (*s == '0' && *(s + 1) == 'X') s += 2; bool firsttime = true; while (*s != '\0') { bool found = false; for (int i = 0; i < HexMapL; i++) { if (*s == HexMap[i].chr) { if (!firsttime) result <<= 4; result |= HexMap[i].value; found = true; break; } } if (!found) break; s++; firsttime = false; } free(mstr); return result; } |