그냥 적당한 XML라이브러리 받아와서 XML로 통신하는게 깔끔하고 편하지만 그래도 가끔 그걸 못쓸때 TCP로 통신한다던가 C#이랑 마샬링같은걸 하면서 유니코드로 문자열 주고받기는 참 어렵다......

몇몇 상황에서만 적용되는 꼼수이긴 하지만 다음과 같은 방법으로 해결도 가능하다.

char* buff = 뭔가 유니코드틱한 문자당 2바이트 이상의 크기를 가진 데이터들이 있는 배열;

const wchar_t *wc = (const wchar_t*)buff;

원리는 간단하다.

wchar(wide char의 약자이다.) 는 char랑 다르게 하나당 2바이트이상의 공간을 가지고 유니코드 형식의 문자열을 표시해준다.

char배열에 저장되 있는 바이트코드를 wchar가 가르키게 하는것이다.

단 이 방법은 모든 플랫폼에서 통용되지는 않는다.

5.2.1.2 Multibyte characters

  1. The source character set may contain multibyte characters, used to represent members of the extended character set. The execution character set may also contain multibyte
    characters, which need not have the same encoding as for the source character set. For
    both character sets, the following shall hold:
~중략~
  1. 18 Environment §5.2.1.2 WG14/N1256 Committee Draft — Septermber 7, 2007 ISO/IEC 9899:TC3
    A multibyte character set may have a state-dependent encoding, wherein each sequence of multibyte characters begins in an initial shift state and enters other
    locale-specific shift states when specific multibyte characters are encountered in the
    sequence.

위 내용은 C99에서 발췌한 내용인데 보다싶이 whar_t에 대한 인코딩은 명확히 규정된게 아니다.

일단 Microsoft C/C++ compilerGCC의 경우 각각 유니코드랑 UTF-32를 사용해서 위 방법이 통용되니 이 두가지 컴파일러에 한해서는 꼼수로 써먹을수 있다.