Tôi có con trỏ tới vectơ thuộc loại uint8.Chuyển đổi vectơ của uint8 thành chuỗi
Làm cách nào để lấy con trỏ này và chuyển đổi dữ liệu trong vectơ thành một chuỗi đại diện đầy đủ của nội dung của nó?
Tôi có con trỏ tới vectơ thuộc loại uint8.Chuyển đổi vectơ của uint8 thành chuỗi
Làm cách nào để lấy con trỏ này và chuyển đổi dữ liệu trong vectơ thành một chuỗi đại diện đầy đủ của nội dung của nó?
Bạn chỉ có thể khởi tạo std::string
với trình tự thu được từ std::vector<uint8_t>
:
std::string str(v->begin(), v->end());
Không cần để chơi bất kỳ thủ đoạn kiểm tra xem std::vector<uint8_t>
trống: nếu nó là, phạm vi sẽ trống rỗng. Tuy nhiên, bạn có thể muốn kiểm tra xem con trỏ có phải là v
không. Ở trên đòi hỏi rằng nó trỏ đến một đối tượng hợp lệ.
Có ổn không nếu tôi hỏi tại sao bạn lại đi quá lâu? – 0x499602D2
@ 0x499602D2: Ý anh là, tại sao tôi không trả lời câu hỏi một lúc? Thật đơn giản: Tôi đã bận rộn cố gắng hoàn thành công việc bên cạnh công việc. Ngay bây giờ tôi bận rộn trong công việc để làm việc ngoài công việc. –
Tôi ngạc nhiên câu trả lời này được chấp nhận bởi vì nó không tạo ra một cái gì đó "đại diện cho nội dung của nó". Nếu bạn vectơ là "{1,2,3,4,5,6,7,8,9}" thì đầu ra của bạn sẽ là một chuỗi các ký tự không thể hiển thị! –
vector<uint8_t> *p;
string str(
p && !p->empty() ? &*p->begin() : NULL,
p && !p->empty() ? &*p->begin() + p->size() : NULL);
Không cần phải chơi bất kỳ thủ thuật nào với các vectơ 'empty()': chúng sẽ trả về một phạm vi hợp lệ và 'std :: string' có một hàm tạo lấy một cặp các trình vòng lặp đầu vào. –
@ DietmarKühl: Ồ đúng rồi, tôi có thói quen làm điều này vì đôi khi tôi biên dịch với một thực thi STL cũ mà không có quá tải quá tải, hoàn toàn quên mất. – Mehrdad
có, việc triển khai RogueWave cũ vẫn vận chuyển như thư viện C++ chuẩn mặc định cho Sun Studio, tôi đoán vậy. Nếu tôi đã sử dụng mà tôi thực sự sẽ sử dụng 'std :: copy (v-> begin(), v-> end(), std :: back_inserter (str));'. –
Đối với những người muốn chuyển đổi được thực hiện sau khi một chuỗi được khai báo, bạn có thể sử dụng std :: string :: gán(), ví dụ:
std::string str;
std::vector<uint8_t> v;
str.assign(v.begin(), v.end());
Bạn nên đã biết độ dài từ vector -> size(). Liệu nó có dữ liệu không phải ascii bên trong nó hay không? – Duck
Đó là tất cả dữ liệu ascii. –