Có cơ chế std::streambuf
để chuyển đổi giá trị nhiều byte sang thứ tự byte mạng không? Đặc biệt, Boost Asio có cung cấp nguyên thủy như vậy không? Dưới đây là một ví dụ về những gì tôi muốn bộ đệm dòng để làm:Có phiên bản std :: streambuf chuyển đổi thứ tự byte của máy chủ sang mạng không?
uint64_t x = 42ull;
network_streambuf b1;
std::ostream os(&b1);
os << 42ull; // htonll
network_streambuf b2;
std::istream is(&b2);
uint64_t y;
is >> y; // ntohll
EDIT: Những câu trả lời gợi ý rằng đây là cách sai lầm khi nghĩ về vấn đề này: bộ đệm dòng chỉ đơn giản là cung cấp quyền truy cập vào chuỗi ký tự, công việc của họ không phải là thực hiện định dạng I/O hoặc chuyển đổi. Tôi có thể sẽ triển khai một lớp đệm nhỏ cung cấp các tình trạng quá tải cần thiết cho operator<<
và operator>>
để thực hiện chuyển đổi.
Câu hỏi của bạn sẽ có ý nghĩa hơn nếu bạn đã xác định 'b2' trong ví dụ của mình. Ngoài ra, tại sao 'toán tử << (…, unsigned long long)' gọi 'htons'? Bạn sẽ không thích nó để gọi 'htonll'? –
Cảm ơn Rob, tôi đã sửa lỗi. – mavam
Tôi nghĩ rằng bạn đang tìm kiếm giải pháp ở sai địa điểm. Khi trình định dạng ('ostream') kết thúc, nó sẽ truyền một luồng byte tới' streambuf'. Có vẻ như bạn thực sự muốn một "nhị phân" ostream' nếu thứ tự byte của các số đầu ra là một vấn đề mà bạn đang cố gắng giải quyết. –