2012-07-13 22 views
13

bộ đệm giao thức cho biết nó có thể contain any arbitrary sequence of bytes. nhưng nếu dữ liệu của tôi chứa '\ 0', cách bộ đệm giao thức có thể mã hóa toàn bộ dữ liệu của tôi từ một biến chuỗi.tại sao byte đệm giao thức là chuỗi trong c + +?

+0

Ý anh là gì bởi "một chuỗi biến"? Đây có phải là 'char *' không? Có phải C, Java hay cái gì khác? –

+1

@Marcelo Tôi đoán anh ta có nghĩa là 'chuỗi' từ '' ... –

+1

Tôi không phải là người C++ nữa, nhưng tôi đã bị ấn tượng rằng '\ 0' không có ý nghĩa đặc biệt trong chuỗi C++ * * trừ khi ** bạn đang sử dụng các phương thức xử lý cụ thể '\ 0'. Vậy ... chỉ không sử dụng những phương pháp đó? –

Trả lời

12

Việc triển khai bộ đệm giao thức C++ trả về các loại chuỗi và chuỗi là std::string. Cấu trúc này chứa một hàm chiều dài cho bạn biết dữ liệu tương ứng bao lâu (cũng như chính dữ liệu.) Vì vậy, không có ý nghĩa đặc biệt nào khi nhúng các ký tự \0.

Các chức năng cài đặt cũng chấp nhận một chuỗi hoặc có các phiên bản chấp nhận bộ đệm và độ dài. Nếu bạn muốn thiết lập một lĩnh vực bạn chỉ có thể làm điều này:

pb.set_foo(std::string(data, data_length)); 

hoặc

pb.set_foo(data, data_length); 
+0

Xem thêm https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls – Raedwald