我有以下具有写入功能的自定义接收器:
std::streamsize MySink::write(const char* s, std::streamsize n) {
unsigned int cnt = 0;
if(n < 4) {
BOOST_LOG_TRIVIAL(error) << "More than 4 bytes are required";
return 0;
}
do {
container_T::value_type val;
val.first = static_cast<std::uint16_t>(s[cnt]) << 8 |
static_cast<std::uint16_t>(s[cnt + 1]);
val.second = static_cast<std::uint16_t>(s[cnt + 2]) << 8 |
static_cast<std::uint16_t>(s[cnt + 3]);
this->dataContainer->push_back(val);
cnt += 4;
}while(cnt + 3 < n);
return cnt;
}
此功能从外部FIFO缓冲区获取数据,该缓冲区由某些硬件填充。 FIFO具有32位输入,它们是两个16位对。我要写入的数据结构是双对向量。我希望写函数参数n至少有4个字节,并且是4个字节的任意倍数。 boost iostreams库是否允许我在这里做什么?我检查是否至少有4个字节,并且返回值将始终为4的倍数。
当有3个字节进入并且返回值为零时,行为是什么?