我不得不承认,我有点感到迷惘,很抱歉,如果这个问题心不是很清楚的或微不足道的(其实我希望是后者)....流数据转化为字节数组
我送在网络字节数组,并希望做这样的事情在发送方:
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