【发布时间】:2017-06-28 12:21:05
【问题描述】:
我不得不承认我现在有点困惑,如果问题不是很清楚或微不足道,我很抱歉(实际上我希望是后者)......
我正在通过网络发送一个字节数组,并希望在发送方做这样的事情:
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应该没问题,但我不确定它使用的内部缓冲区是否适合您的用例。 -
@Rakete1111 我想我已经看过了,但是在阅读了太多关于流的不同地方之后,我有点困惑。我会试一试,谢谢提示
标签: c++ stream bytebuffer