'ASCII'에 해당되는 글 3건

  1. 2009.10.09 아스키코드(ASCII CODE)와 유티코드(UNICODE)
  2. 2009.03.03 아스키 코드표
  3. 2008.01.30 시리얼 통신 프로그램 2
2009. 10. 9. 11:37

아스키코드(ASCII CODE)와 유티코드(UNICODE)



현재 운영체제가 표현하는 대표적인 문자셋(Character Sets)으로는 아스키코드(ASCII Code)유니코드(UNICode)가 있다.
여기서는 윈도우즈 운영체제를 기준으로 한다.

아스키코드
아스키코드는 미국에서 정의하고 있는 표준이다.
알파벳 26개와 확장 문자를 포함하여 총 256개를 넘지 않는 문자가 존재한다. 이는 1 바이트를 가지고 충분히 표현할 수 있기에 1 바이트의 char형을 사용해서 표현을 할 수 있다.
아스키코드에 해당하는 문자들은 http://todayis.tistory.com/191 에서 확인할 수 있다.

문제는 영어권이 아닌 다른 국가의 언어를 표현하는데 1 바이트로는 무리가 있다는 것이다. 한글의 경우만 보아도 한글의 글자 하나하나에 값을 지정해 주어야 한다. 한글은 그렇다 치더라도 중국어는 어떻할 것인가??
그래서 등장한 것이 유니코드이다.

유니코드
문자를 표현하는데 2 바이트를 사용해 총 65,536개의 문자를 표현할 수 있도록 정의해 놓은 문자셋이다.
전 세계의 모든문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계되었다.


문자를 표현하는데 아스키코드는 1 바이트, 유니코드는 2 바이트를 사용하기 때문에, 동시에 이 둘을 모두 사용하기에는 운영체제가 혼란을 겪을 것이다. 컴퓨터(운영체제)는 단순하기 때문에 하나로 통일을 해 주어야 일을 제대로 할수 있다고 하던데.. ^^;

해결 방법으로 문자셋마다 처리하는 표준을 정의했다.
아스키코드를 처리하기 위한 표준으로 SBCS(Single Byte Character Set)라는 녀석을 정의했고, 유니코드를 처리하기 위해서는 WBCS(Wide Byte Character Set)라는 녀석을 정의해 둔 것이다.
중간에 경우에 따라 1 바이트, 2 바이트를 처리하도록 정의된 MBCS(Multi Byte Character Set)이란 녀석도 있다.

아스키코드 기반으로 문자열을 처리하기 위한 프로그램을 작성할 때에는 이전에 C언어를 배울 때 습관적으로 사용하던 문자 처리방식을 습관적으로 사용하던 방식을 그대로 사용하면 된다.
char, "string", strlen()...

유니코드 기반으로 문자열을 처리하기 위해서는 이와는 약간 다른 부분들이 존재한다.
wchar_t, L"string", wcslen()

위와 같이 자료형, 문자열 표현방법, 함수등이 유니코드 처리에 맞게 재설정 되어있다. 이러한 내용은 윈도우즈에서 제공하는 헤더파일(windows.h, windef.h, winnt.h)을 살펴보면 알 수 있다.

일반적으로 유니코드와 아스키코드를 동시에 지원하기 위해 아래와 같은 방법을 tchar.h 라는 헤더파일에 정의해 두었다. tchar.h 는 windows.h에 포함되지 않기 때문에 명시적으로 추가해 주어야 한다.
자료형의 경우..
#ifdef UNICODE
    typedef  WCHAR     TCHAR;
    typedef  LPWSTR    LPTSTR;
    typedef  LPCWSTR  LPCTSTR;
#else
    typedef  CHAR        TCHAR;
    typedef  LPSTR       LPTSTR;
    typedef  LPCSTR     LPCTSTR;
#endif

함수의 경우..
#ifdef _UNICODE
    #define  _tprintf    wprintf
...
#else
    #define  _tprintf    printf
...
#endif

위와 같이 정의가 되어 있기 때문에 UNICODE(_UNICODE) 의 정의 유무에 따라 아스키코드 또는 유니코드 방식으로 컴파일을 할 수가 있다.
tchar.h 헤더파일을 살펴보는 것도 큰 도움이 될 듯 하다.

참고로 본인이 사용하고 있는 Visual Studio 2005는 유니코드로 미리 정의가 되어 있다.
메뉴에서 [project] -> [CommandPrompt Properties...] 를 선택하면 확인할 수 있다. Alt+P 키를 두 번 눌러도 됨

미리 정의된 유니코드로 작업하기 싫다고 하면, 체크박스로 된 Inherit from parent or project defaults의 체크를 해제하면 된다. 이게 싫다면, 소스코드 내에서 #undef 를 사용해 미리 정의된 UNICODE를 무효화 시키면 된다.
#undef _UNICODE
#undef UNICODE
...

2009. 3. 3. 14:59

아스키 코드표



문자열 작업을 하다 보면 가끔 필요할 때가 있는데.. 그때마다 웹에서 아스키 코드 검색하는것두 꽤 귀찮다.
그냥 여기에 올려놓고 필요할 때 볼려구... ^^;

아스키 코드표

2008. 1. 30. 16:51

시리얼 통신 프로그램



얼마 전 '거리측정 초음파 센서'로 작업을 할 때 테스트 용으로 사용했었던 시리얼 통신 프로그램이다.

당시 초음파 센서로 특정 명령을 HEX 값으로 날리는 작업이 필요했었는데.. 웹에서 구하는 다른 프로그램들은 대부분(사실 내가 찾았던 것들은 모두가...) ASCII 로만 값을 날리는 것들 뿐이었다.

그러던 도중 'Commaster'이라는 통신 프로그램을 구하게 되었다.

꽤나 단순한 작업을 할 수 있는 프로그램이었고,  ASCII값이나 HEX값을 모두 날릴수 있도록 지원이 되어서 테스트를 진행 할 수있었다.

사용자 삽입 이미지
시리얼 통신 프로그램 commaster

누가 만들었는지는 몰라도 그땐 정말 고마웠다. ㅎㅎ
"감사히 잘 썼습니다!!!!"
이렇게 감사의 인사라도 해야하는 것이 예의일거 같아서..

일단 다른 사람들도 필요할 때 사용할 수 있으면 좋을 것 같아서 파일을 올린다.

만약 '저작권'(?)같은것 때문에 문제가 된다면 얘기해주시길...