2011-01-28 41 views
9

Tôi muốn chuyển đổi một chuỗi char* thành một chuỗi wchar* trong C.Chuyển đổi char * để WCHAR * trong C

Tôi đã tìm thấy nhiều câu trả lời, nhưng hầu hết trong số đó là cho C++. Bạn có thể giúp tôi?

Cảm ơn.

+2

Mã hóa ban đầu trong 'char *' của bạn là gì? UTF8? ANSI? 'Sizeof (wchar)' trên hệ thống của bạn là gì và nó dựa vào mã hóa nào? UCS-2 (16bit)? UCS-4 (32bit)? – Benoit

+0

@Benoit: Whoa ... Tôi nghĩ 'sizeof (wchar)' luôn là 2, phải không? – Mehrdad

+0

@Mehrdad: Nó không nhất thiết 2. Nó được thực hiện xác định. Nếu lập trình trên Windows, nó có kích thước là hai byte và giữ UTF-16, với cặp đôi của các cặp thay thế. – Benoit

Trả lời

3

setlocale() theo sau là mbstowcs().

+0

Điều này là OK miễn là đầu vào là một chuỗi ANSI. – Benoit

+0

@Benoit: Vâng, rõ ràng là có nhiều chuyển đổi chuỗi hơn là chỉ gọi một hàm duy nhất. Nhưng tôi đã không đưa ra bất kỳ chi tiết nào kể từ khi tôi nghĩ rằng đây là tất cả các OP đang tìm kiếm ... – Mehrdad

+0

Các imput đến từ LdapDirectory, vì vậy tôi đoán đó là một UTF8? – Crupuk

14

Hãy thử swprintf với cờ %hs.

Ví dụ:

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

tôi sẽ cố gắng tối nay, bây giờ tôi không có quyền truy cập vào một shell.Thanks – Crupuk

+0

@NickDandoulakis Tôi nghĩ câu trả lời này có thể rất hữu ích, tuy nhiên tôi phát hiện ra rằng swprintf có thể có 2 giao diện có thể, bạn có thể vui lòng xem tại câu hỏi này? http://stackoverflow.com/q/17716763/2436175 – Antonio

+0

@Antonio giao diện yêu cầu độ dài bộ đệm là độ dài bộ đệm. –

-1

Nếu bạn tình cờ có API availiable Windows, chức năng chuyển đổi MultiByteToWideChar cung cấp một số chuyển đổi chuỗi cấu hình từ mã hóa khác nhau để UTF-16. Điều đó có thể phù hợp hơn nếu bạn không quan tâm quá nhiều về tính di động và không muốn tìm ra chính xác ý nghĩa của các cài đặt miền địa phương khác nhau là chuỗi hội tụ.

1

những gì bạn đang tìm kiếm là

mbstowcs 

hoạt động giống như các chức năng sao chép từ char * để char *

nhưng trong trường hợp này, bạn đang tiết kiệm thành một wchar_t *

-2

nếu bạn đang có ký tự ANSI. chỉ cần chèn một 0 ('\ 0') trước mỗi char và cast chúng vào wchar_t *.

Các vấn đề liên quan