|
"48 65 6C 6C 6F 20 57 6F 72 6C 64 21"라는 Hex값과 사이띄게로 이뤄진 문자열을 사이띄게를 기준으로 잘라서 각Hex값을 Hex값과 10진 int값과 해당 Ascii코드값에 해당하는 char값을 출력하려고 하는데, while문에서 48 값이 생략됩니다.
뭐가 문제일까요?
출력값
=================================================
hexadecimal value = 65, int value = 101, char value=e
hexadecimal value = 6C, int value = 108, char value=l
hexadecimal value = 6C, int value = 108, char value=l
hexadecimal value = 6F, int value = 111, char value=o
hexadecimal value = 20, int value = 32, char value=
hexadecimal value = 57, int value = 87, char value=W
hexadecimal value = 6F, int value = 111, char value=o
hexadecimal value = 72, int value = 114, char value=r
hexadecimal value = 6C, int value = 108, char value=l
hexadecimal value = 64, int value = 100, char value=d
hexadecimal value = 21, int value = 33, char value=!
Process returned 0 (0x0) execution time : 0.312 s
Press any key to continue.
=================================================
#include <iostream>
using namespace std;
char HexChar2Bin(char *HexStr);
int Hex2Dec(char ch);
int main()
{
HexChar2Bin("48 65 6C 6C 6F 20 57 6F 72 6C 64 21");
return 0;
}
char HexChar2Bin(char HexStr[])
{
char *Hex = strtok(HexStr, " ");
while ((Hex = strtok(NULL, " ")) != NULL)
{
int value;
value = (int)Hex2Dec(Hex[0])*16+Hex2Dec(Hex[1]);
char charValue = (char)value;
cout << "hexadecimal value = "<< Hex << ", int value = " << value
<< ", char value=" << charValue << endl;
}
return 0;
}
int Hex2Dec(char ch)
{
if(ch >= '0' && ch <= '9') return (int)(ch - '0');
if(ch >= 'A' && ch <= 'F') return (int)(ch - 'A' + 10);
if(ch >= 'a' && ch <= 'f') return (int)(ch - 'a' + 10);
return 0;
}
|