|
while 문 전에 쓴 strtok 이 문제이군요
strtok은 쓰게 되면 값을 변화 시키기 때문에 쓰실때 유의 하셔야 됩니다
strtok은 원하시는 문자까지의 값을 반환 한후 읽어드린 데까지의 데이타를 바꿉니다
"나 는 천 재"라는 값이
"나는 천 재" 로 바뀌는 것이지요
즉 HexStr의 값이 바뀌는 것이지요
while문 전에 쓴 strtok이 HexStr의 첫번째 값을 이미 뽑아서 보여주고 읽어들인데까지의 값을 망가뜨린후
님이 쓰신 while문에 들어가 또한번 strtok을 만나니까 2번째 값을 보여주는 것이지요 즉 첫번째 값은
while문 이전에 이미 한번 나온 것입니다
박정용 님이 쓰신 글 :
: "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;
: }
|