【问题标题】:How to create streambuf with array of unsigned char in C++如何在 C++ 中使用 unsigned char 数组创建 streambuf
【发布时间】:2020-04-16 07:04:48
【问题描述】:

我想创建一个带有流缓冲区对象的std::istream 对象,该对象可以从无符号字符数组中获取原始字节数据。我搜索并找到了这个Link

但是他们基于数组 char 创建流缓冲区:

struct membuf : std::streambuf
{
    membuf(char* begin, char* end) {
        this->setg(begin, begin, end);
    }
};

我考虑过 type caste ,但我不想修改原始数据。那么如何使用 unsigned char 来完成。

【问题讨论】:

  • 在创建membuf 时,只需将指针转换为char*。它不会修改数据。
  • 无论是签名还是未签名,在您使用流媒体时都不会改变

标签: c++ istream streambuf


【解决方案1】:

对于std::istream,您不能显式使用unsigned char,因为它是std::basic_istream<char> docs 的类型定义。您可以将缓冲区指针转换为char*

this->setg(reinterpret_cast<char*>(begin), reinterpret_cast<char*>(begin), reinterpret_cast<char*>(end));

请注意,将大于CHAR_MAX 的值转换为charimplementaion defined(当然,只有当您实际将此值用作char 时)。

或者你可以尝试使用std::basic_istream&lt;unsigned char&gt;(虽然我没试过)。

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2011-11-05
    相关资源
    最近更新 更多