2011-01-28 7 views
9

에 * WCHAR에 나는 C.변환 문자는 * C

나는 많은 답을 발견 한 wchar* 문자열로 char* 문자열을 변환하고 싶지만, 대부분은 C에 대한 것입니다. 당신이 나를 도울 수?

감사합니다.

+2

'char *'의 원래 인코딩은 무엇입니까? UTF8? ANSI? 당신의 시스템에서'sizeof (wchar)'이란 무엇이고 어떤 인코딩이 그것들에 의존 하는가? UCS-2 (16 비트)? UCS-4 (32 비트)? – Benoit

+0

@ 베노아트 : 우와 ... 나는 sizeof (wchar)가 항상 2라고 생각 했지? – Mehrdad

+0

@Mehrdad : 반드시 2 일 필요는 없습니다. 구현에 따라 정의됩니다. Windows에서 프로그래밍하는 경우에는 2 바이트 크기이며 UTF-16을 보유하고 서로 게이트 쌍에 대해 이중 wchar_t를 유지합니다. – Benoit

답변

3

setlocale() 다음에 mbstowcs()이 뒤 따른다.

+0

입력이 ANSI 문자열 인 경우이 작업은 정상입니다. – Benoit

+0

@Benoit : 그래, 단 하나의 함수를 호출하는 것보다 문자열 변환이 더 많습니다. 하지만 이것이 OP가 찾고있는 것 같기 때문에 나는 세부 사항을 말하지 않았다. – Mehrdad

+0

imput은 LdapDirectory에서 온 것이므로 UTF8 일까? – Crupuk

14

플래그로 swprintf을 시도하십시오.

wchar_t ws[100]; 
swprintf(ws, 100, L"%hs", "ansi string"); 
+0

나는 오늘 저녁에 노력할 것이다. 지금은 쉘에 접근 할 수 없다. 감사합니다. – Crupuk

+0

@NickDandoulakis이 대답은 매우 유용 할 수 있다고 생각하지만, swprintf가 2 개의 가능한 인터페이스를 가질 수 있다는 것을 알았습니다. 이 질문에? http://stackoverflow.com/q/17716763/2436175 – Antonio

+0

@Antonio 버퍼 길이가 필요한 인터페이스는 휴대용입니다. –

-1

당신은 윈도우 API의 availiable이 일어날 경우는, 변환 기능 MultiByteToWideChar이 UTF-16에 다른 ​​인코딩에서 일부 구성 문자열 변환을 제공합니다 : 예

. 이식성에 대해별로 신경 쓰지 않고 다른 로케일 설정의 의미가 문자열 변환과 정확히 일치하는지 파악하고 싶지 않은 경우에 더 적합 할 수 있습니다.

1

당신이 찾고있는 단지의 char *에서 복사 기능과 같은

mbstowcs 

작품 *

를 숯불 할 수 있지만,이 경우에 당신이에서 wchar_t *로 저장하는 것입니다

-2

현재 ANSI 문자가있는 경우. 각 문자 앞에 0 ('\ 0')을 삽입하고 wchar_t *에 캐스트하면됩니다.

관련 문제