Как создать streambuf с массивом unsigned char в C ++ - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу создать объект std :: istream с объектом потокового буфера, который может принимать необработанные байтовые данные из массива беззнакового символа. Я искал и нашел это Ссылка

Однако они создают буфер потока на основе массива char:

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

Я думал о типе касты, но я не хочу изменить исходные данные. Так, как я могу это сделать, используя unsigned char.

1 Ответ

1 голос
/ 16 апреля 2020

С std::istream вы не можете использовать unsigned char явно, потому что это typedef для std::basic_istream<char> docs . Вы можете привести свои буферные указатели к char*

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

Обратите внимание, что преобразование значений, превышающих CHAR_MAX в char, определяется реализацией, определенной (конечно, только если вы на самом деле используйте эти значения как char).

Или вы можете попробовать использовать std::basic_istream<unsigned char> (хотя я еще не пробовал).

...