어떻게하면 std :: wstring을 const * char로 변환 할 수 있습니까?std :: wstring을 C++의 const * char로 변환하십시오.
답변
당신은 c_str
멤버 함수를 사용하여 std::wstring
const wchar_t *
A를 변환 할 수 있습니다 :
std::wstring s;
const wchar_t *str = s.c_str();
그러나, const char *
로 변환 자연되지 않습니다 : 그것은 std::wcstombs
에 추가 호출이 필요합니다.
wcstombs를 포함한 전체 예제를 제공 할 수 있습니까? 나는 당신이 제안한대로 이것을 풀려고 노력하고있다. –
wstring이 wStr 일 때 : 'const wchar_t * str = wStr.c_str(); size_t size = wcslen (str) * 2 + 2; char * StartPoint = new char [size]; size_t c_size; wcstombs_s (& c_size, StartPoint, size, str, size); ' – arielhad
@arielhad 크기 정의 끝에 +2가 표시되는 이유는 무엇입니까? 또한 크기에 대한이 '공식'은 char이 8 비트이고 wchar_t가 16 비트라고 가정합니다. 그렇지 않습니까? sizeof()를 호출하는 것이 더 좋을 것이라고 생각합니다. 모든 플랫폼에서 반드시 필요한 것은 아니기 때문입니다. – KjMag
이렇게하면 안됩니다. std::wstring
은 넓은 (유니 코드) 문자의 문자열을 나타내며 char*
은 ASCII 문자의 문자열입니다. 유니 코드에서 ASCII 로의 코드 페이지 변환이 있어야합니다.
wcstombs
또는 Windows 'WideCharToMultiByte
기능과 같은 표준 라이브러리 기능을 사용할 수 있습니다.
은 의견을 통해 정보를 통합하여 업데이트했습니다. 감사합니다.
표준 라이브러리가이를 처리합니다. 예를 들어'wcrtomb','wcsrtombs'를보십시오. – nothrow
@Yossarian : 표준 라이브러리 함수의 문제점은 표준이 어떤 와이드 문자 세트를 정의하지 않으며 어떤 멀티 바이트 문자 세트가'wcstombs'에서 사용되는지 정의하지 않는다는 것입니다. 특정 인코딩 (예 : UTF-8)에서 문자열을 가져와야하는 경우 직접 변환을 작성하거나 플랫폼 특정 확장 (예 : WideCharToMultiByte)을 사용해야합니다. –
std :: string은 UTF- 8 및 std :: wstring은 UTF-16/UTF-32와 결혼하지 않습니다. 그래서 이것은 매우 오해의 소지가있는 대답입니다. – anno
- 1. boost :: uuid를 char로 변환하십시오.
- 2. Wstring을 CString으로 변환하십시오.
- 3. 리눅스에서 윈도우로 작성된 std :: wstring을 읽는 방법
- 4. QT에서 16bit QImage를 8bit unsigned char로 변환하십시오.
- 5. C의 CONST/C에
- 6. std :: C의 대안 C
- 7. STL wstring을 typedef'ing
- 8. const std :: pair를 어떻게 초기화합니까?
- 9. wstring을 const char *로 변환하는 함수. 질문으로 SQlite
- 10. 목표 C의 -std = C99 사용
- 11. C++에서 ascii 코드를 사용하여 std :: wstring을 만드는 방법은 무엇입니까?
- 12. 어떻게 const std :: vector <Object * const>를 반환할까요?
- 13. const char [] 또는 const std :: string을 사용할 것은 어느 것입니까?
- 14. const std :: map <boost :: tuples :: tuple, std :: string>?
- 15. const std :: string 참조의 참조를 변경합니다.
- 16. C++ const std :: map reference가 컴파일되지 않습니다.
- 17. C에서 문자열을 char로 변환하는 방법
- 18. gdb에서 wstring을 인쇄하는 방법
- 19. uintmax_t를 문자열 c로 변환하십시오.
- 20. 접근 자 함수는 const 인수를 받지만 C의 비 const 포인터를 반환 함
- 21. "const TCHAR에 대한 포인터"를 "std :: string"으로 어떻게 변환합니까?
- 22. std :: string 생성자를 사용하는 const char *의 복사
- 23. CString :: Format()은 const std :: string을받을 수 있습니까?
- 24. C++ const std :: string & 대신 문자열 리터럴 전달?
- 25. 문자열을 char로 변환
- 26. System.Windows.Forms.Keys의 시퀀스를 Char로 변환
- 27. char로 변환되었지만 공백으로 완료
- 28. NSString을 char로 변환하는 방법?
- 29. 체크섬을 C에서 char로 적용
- 30. 문자열 ^을 char로 변환해야합니다. *
여러 가지가 있습니다. 어느 것이 당신에게 옳은가는 당신이 제공하지 않은 많은 사실에 달려 있습니다. 어떤 인코딩을 결과를 원하십니까? 어떤 플랫폼/인코딩 변환 lib를 사용하고 있습니까? – sbi
어떤 운영 체제입니까? 적어도 Windows에서는이 작업을 수행하지 않는 것이 좋습니다. UTF-8 문자열을 파일에 쓰고 싶다면. – Philipp
반드시 읽어야하는 "모든 소프트웨어 개발자 절대적으로 최소, 유니 코드와 문자 집합에 대해 절대적으로 알고 있어야합니다."(http://www.joelonsoftware.com/articles/Unicode.html) "이 있습니다. ! – Jaywalker