Graphisoft®

GSRootVersion: 1.0

CHUnicode2ANSI

Unicode 문자열을 ANSI 문자열로 변환합니다.

    long CHUnicode2ANSI (
      const GS::uchar_t*  pWChars,                            // unciode string to convert
      long                nWChars,                            // number of chars in string
      char*               pChars,                             // buffer for new string
      long                maxChars,                           // size of buffer
      GSCharCode          charCode = CC_Default,
      bool                lossyConversion = true,             // unconvertable paremeters are converted to platfrom replacement char
      CHUnicode2ANSICacheRef*  cache = NULL           // can be used to cache conversion result, if called twice
    );

파라미터

pWChars
[in] 변환할 Unicode wide-character 문자열을 가리킵니다.
nWChars
[in] pWChars 파라미터가 가리키는 문자열의 wide character들의 수를 지정합니다. 만약 이 값이 -1이면, 이 문자열은 null로 끝난다고 가정하고 길이가 자동으로 계산됩니다. 길이는 null-terminator를 포함하게 될 것입니다.
pChars
[out] 변환된 문자열을 받을 버퍼를 가리킵니다.
maxChars
[in] pChars 파라미터가 가리키는 버퍼의 바이트 단위의 크기를 지정합니다. 만약 이 값이 0이면, 이 함수는 버퍼에 대하여 요청된 바이트들의 수를 리턴합니다. (이 경우, pChars 버퍼는 사용하지 않음)
charCode=CC_Default
[in] 변환을 수행하기 위해 사용되는 코드 페이지를 지정합니다. 이 파라미터에 대하여 CC_UTF8이 유효합니다.
lossyConversion
[in] 만약 true이면, 표현할 수 없는 문자들을 Windows의 경우 시스템 의존적인 기본 대체 문자로, MacOS의 경우 '?'로 변환합니다. 만약 false이면, 표현할 수 없는 문자를 만나게 되면 변환이 실패하게 됩니다.
cache
[in/out] 만약 null이 아니면, 2-단계 호출들에 대한 변환 결과를 캐시합니다. 일반적으로 당신은 동일한 ANSI 문자열로 변환을 2번 호출합니다. 먼저 결과의 길이를 계산하기 위해 당신은 버퍼를 할당할 수 있습니다. 그리고 나서 버퍼에 결과를 저장합니다. 길이 계산을 위해 사용된 변환된 문자열을 캐시하기 위해 이 파라미터를 사용할 수 있습니다. 그래서 이것은 변환시에 재사용될 수 있습니다. 만약 maxChars가 0이며 cache가 NULL이 아니면, 이것은 NULL Unicode2ANSICacheRef를 가리켜야 합니다. 만약 재활용 가능한 정보가 무엇이라도 존재한다면, 그것은 이 레퍼런스 안에 저장될 것입니다. 레퍼런스는 차후 호출시에 CHUnicode2ANSI 또는 CHFreeUnicode2ANSICache로 해제됩니다. 만약 maxChars가 0이 아니며 cache가 NULL이 아니면, 유효한 케시를 가리킵니다. 변환시 도움을 받기 위해 이 캐시를 사용합니다. cache가 0이 아닌 경우, 이 함수는 pWCharsnWChars 대신 cache 데이터를 사용할 수도 있습니다. cache는 해제될 것이며 사용 후에 0으로 채워질 것입니다.
GS::Unicode2ANSICacheRef cache = 0;

len = CHUnicode2ANSI (uniStr, GS::CStringLen, 0, 0, CC_Default, true, &cache);

if (len > 0) {

  try {

    p = new char [len];
    res = CHUnicode2ANSI (uniStr, GS::CStringLen, p, len, CC_Default, true, &cache);

  } catch (std::bad_alloc& ) {

    if (cache)
      CHFreeUnicode2ANSICache (cache);
  }
}

리턴 값

만약 함수가 성공하고 maxChars가 0이 아니면, 리턴 값은 pChars가 가리키는 버퍼에 작동된 바이트들의 수입니다. 이 수는 null terminator에 대한 바이트를 포함하고 있습니다.

만약 함수가 성공하고 maxChars가 0이면, 리턴 값은 변환된 문자열을 받을 수 있는 버퍼에 대한 바이트 단위의 요청된 크기입니다.

만약 함수가 실패하면, 리턴 값은 0입니다. 이 함수는 다음의 경우 실패할 수 있습니다:

- 메모리가 부족함.

- 유효하지 않은 파라미터들.

- lossyConversion이 false이며 입력 문자열 안에 대상 코드 페이지로 표현할 수 없는 문자들이 있습니다.

- 제공된 버퍼가 너무 작음.

설명

pCharspWChars 포인터들은 동일하거나 중첩되어서는 안 됩니다. 그러한 경우에 대한 결과는 정의되어 있지 않습니다!

이 함수는 MacOS의 경우 CoreFoundation String 서비스들을, Windows의 경우 MultiByteToWideChar를 이용하여 구현되었습니다.

요구사항

버전: GSRoot 1.3 또는 이후
헤더: CH.hpp
라이브러리 가져오기: GSRootImp.lib
모듈: GSRoot

참고사항

CHANSI2Unicode