是否有類似std::streambuf
的機制將多字節值轉換爲網絡字節順序?特別是,Boost Asio提供這樣一個原始?下面是我想流緩衝區做什麼的例子:是否有將主機轉換爲網絡字節順序的std :: streambuf版本?
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
編輯:這些問題的答案表明,這是思考問題的錯誤方式:流緩衝區只提供給字符序列的訪問,他們的工作不是執行格式化的I/O或轉換。我可能會實現一個小緩衝區類,爲operator<<
和operator>>
提供必要的重載以執行轉換。
如果您在示例中定義了'b2',那麼您的問題會更有意義。另外,爲什麼'operator <<(...,unsigned long long)'調用'htons'?你不喜歡它調用'htonll'嗎? – 2012-03-07 17:24:36
感謝羅布,我糾正了錯誤。 – mavam 2012-03-07 17:28:27
我認爲你在錯誤的地方尋找解決方案。當格式化程序('ostream')完成時,它將一個字節流傳遞給'streambuf'。這聽起來像你實際上想要一個「二進制」'ostream',如果輸出數字的字節順序是你正試圖解決的問題。 – 2012-03-07 17:45:58