CGI 프로그래밍 (C)

저는 웹사이트를 운영한다거나 하지는 않지만, 프로그래밍 연습 삼아서
C언어로 CGI프로그래밍을 해보다 의문이 생긴 학생입니다.
문자열을 받아서 특정 문자들을 삭제하는 함수를 만든 부분이었는데,
내용이 다음과 같습니다.
char *rmCtrlChar( char *str )
{
char *src, *fp;
if( str )
{
for( src=str, fp=str; *src ;src++ )
if( (*src & 0x7f) >= 0x20 )
*fp++ = *src;
*fp = '\0';
}
return( str );
}
길이는 짧지만, 아직 제가 무슨 말인지 알 수 있는 내용은 아니더군요.
문자열을 대상으로 하는 함수이니, 비교 대상 각각은 1byte의 char형일 것
이라고,
생각해서 1부터 128까지 정수, 16진수, 문자로 출력해 봤지만 이해할만한
실마리를
얻을 수 없었습니다. 특히 이들을 출력하고 나면 터미널이 좀 비정상으로
되었습니다. (치지도 않은 명령어가 나오고...)
0x7f나 0x20에 해당하는 문자는 무엇인지 보이지도 않더군요. 도대체
0x7f는
무엇이고, 이것과 비트 곱 연산...?이면 어떤 비트를 세트하는 것? 그러
면 그렇게
해서 얻은 값이 0x20보다 크면 왜 위험한 문자가 되는 것인지?
특히 0x0e인가 0x0f는 출력하면 터미널의(한텀...) 문자가 완전히 망가져
서 알아볼
수가 없었습니다. 저렇게 짧은 내용에서도 무슨 일이 벌어지는지 알 수
없다니...
마찬가지로 16진수로 인코딩된 문자를 재생한다는 x2c()함수도 의문입니
다.
digit = (what[0] >= 'A') ? ((what[0] & 0xdf)-'A')+10 (what[0] -
'0');
digit *= 16;
digit += (what[1] >= 'A') ? ((what[1] & 0xdf)-'A')+10 (what[1] -
'0');
0xdf로 첫째 문자를 무엇으로 만들 수 있는 것이고, 거기에 -'A' + 10 이
라니?
또 'A'보다 큰 문자값이면 왜 '0'을 빼는가?( 이게 숫자 영역 같지는 않던
데...)
에 대한 의문점을 알 수 없었습니다.
아시는 분께서 답변을 주시면 감사하겠습니다.
Re: CGI 프로그래밍 (C)
문자들이 어떤것들이 있는지는 확실히 몰라도..
저함수는 어떤 문자열들 중에서.. 각문자의최초비트에 상관없이
0x20(공백) 문자보다큰것들만 놔두고 나머지는 지워버리는 함수입니다.
그러니까 아마도 문자가 아닌것들은 제외시키는 함수 같은데요..
댓글 달기