2011-08-08 37 views
7

Tôi đang sử dụng loại basic_string<wchar_t> và cần chuyển đổi nó thành một chuỗi để chuyển qua lớp JNI. Tôi tự hỏi cách tốt nhất để làm điều đó là gì. Tôi có một chức năng có thể cung cấp cho tôi một số std::string từ loại basic_string<wchar_t> của mình, do đó, câu trả lời cho điều đó cũng sẽ rất tuyệt.Chuyển đổi từ basic_string thành jstring

Chúc mừng.

+2

Lưu ý rằng 'std :: basic_string 'được typedef'ed cho' std :: wstring'. –

+1

có thể trùng lặp của [Làm cách nào để chuyển đổi jstring thành wchar_t *] (http://stackoverflow.com/questions/68042/how-do-i-convert-jstring-to-wchar-t) –

+0

Đang cố gắng làm ngược lại và tôi đang cố gắng xem liệu tôi có thể tránh sử dụng char * ở bất kỳ đâu trong đó không. – sparkFinder

Trả lời

5

Bạn sẽ cần phải chuyển đổi tiêu chuẩn :: basic_string thành UTF-8. Nhìn vào những gì xâu chuỗi của bạn -> chuỗi chuyển đổi nào.

Mặt trời có hướng dẫn JNI cho biết cách chuyển đổi char * thành một chuỗi (sử dụng một số quy trình chuyển đổi UTF). Bạn có thể sử dụng wstring- của bạn> chuỗi, sau đó vượt qua trong string.c_str() để chức năng NewStringUTF:

Mã chưa được kiểm tra:

JNIEXPORT jstring JNICALL StringTest(JNIEnv *env) { 
    const char* test = "something"; 
    return (*env)->NewStringUTF(env, test); 
} 
+0

liên kết bị hỏng ngay bây giờ –

+0

Điều đó mong đợi một ** const char ***. Nếu tôi cần chuyển đổi từ ** std :: string ** thì sao? –

+2

@Igor Sử dụng std :: string member .c_str(). –

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