2013-07-19 50 views
21

Tôi hơi nghèo trong việc đúc kiểu. Tôi có một chuỗi trong xmlChar* (mà là unsigned char *), tôi muốn chuyển đổi này unsigned char để một loại std::string.convert unsigned char * thành String

xmlChar* name = "Some data"; 

Tôi đã cố gắng hết sức để nhập diễn viên, nhưng tôi không thể chuyển đổi.

+1

'Chuỗi hoặc 'std :: chuỗi'? 'Chuỗi' là gì, nếu bạn không có nghĩa là' std :: string'? –

+0

Xin lỗi @Mats Petersson, BTW std :: string của nó – Cyril

+0

Sử dụng reinterpret_cast Xem này [http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const- char] [1] [1]: http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char – Ani

Trả lời

36
std::string sName(reinterpret_cast<char*>(name)); 

reinterpret_cast<char*>(name) phôi unsigned char*-char* một cách không an toàn nhưng đó là một trong đó nên được sử dụng ở đây. Sau đó, bạn gọi hàm tạo thông thường là std::string.

Bạn cũng có thể làm điều đó C-style (không khuyến khích):

std::string sName((char*) name); 
+0

Tôi đã thấy rằng trong một số trường hợp, diễn giải lại sẽ tạo ra một số ký tự rác ở cuối. Đã không điều tra quá sâu vì chúng dễ bị cắt ngắn, nhưng tôi nghĩ tôi sẽ đề cập đến nó trong trường hợp tôi không đơn độc. – MatrixManAtYrService

+0

Không phải một mình, đã xảy ra với tôi quá – audiFanatic

+0

Bạn có thể thấy rác vì mảng unsigned char của bạn không kết thúc bằng một terminator null (hoặc không kết thúc với một trong những nơi bạn nghĩ rằng nó không). Nói chung, chỉ cần truyền từ loại sang kiểu chuỗi mà không xem xét NUL là nguy hiểm và bạn nên suy nghĩ cẩn thận nếu mã của bạn theo bất kỳ cách nào khác với ví dụ của OP (chuỗi ** literals ** có null terminators) –

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