我不得不承認,我有點感到迷惘,很抱歉,如果這個問題心不是很清楚的或微不足道的(其實我希望是後者)....流數據轉化爲字節數組
我送在網絡字節數組,並希望做這樣的事情在發送方:
size_t max_size = 100;
uint8_t buffer[size];
idontknowwhat_t x{buffer};
uint16_t size = 11; // total number of bytes in the buffer
uint16_t id_a,id_b,id_c; // some ids
uint8_t a,b,c; // some data
x << size << id_a << a << id_b << b << id_c << c;
someMethodToSend(buffer,size);
,並在接收端是這樣的:
size_t max_size = 100;
uint8_t buffer[size];
someMethodToReceive(buffer);
idontknowwhat_t x{buffer};
uint16_t size;
x >> size;
for (uint16_t i=0; i<size-2; i++) {
uint16_t id;
uint8_t data;
x >> id >> data;
std::cout << id << " " << data;
}
所以我的目標是基本上可以避免醜陋的強制轉換和手動遞增指針,同時能夠在緩衝區中有uint8_t
和uint16_t
(也可能有uint32_t
)。我在這裏放入緩衝區的數據僅僅是一個例子,我知道在通過網絡發送時需要注意字節順序(如果我必須手動執行此操作,那將會很好)。
有什麼我可以用來代替我的假設idontknowwhat_t
?
我認爲['boost :: asio :: streambuf'](http://www.boost.org/doc/libs/1_64_0/doc/html/boost_asio/reference/streambuf.html)應該沒問題,但我不確定它使用的內部緩衝區是否適合您的用例。 – Rakete1111
@ Rakete1111我想我已經看過它了,但在閱讀過很多關於流的不同地方後,我有些困惑。我會試一試,thx的提示 – user463035818