Как создать streambuf с массивом беззнаковых символов в C ++

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

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

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

Я подумал о приведении типов, но не хочу изменять исходные данные, так как это можно сделать с помощью unsigned char.


person user5005768Himadree    schedule 16.04.2020    source источник
comment
Вы можете просто привести указатели к char* при создании membuf. Это не изменит данные.   -  person Botje    schedule 16.04.2020
comment
независимо от подписанного или неподписанного, это ничего не меняет, когда вы используете свой поток   -  person bruno    schedule 16.04.2020


Ответы (1)


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

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

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

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

person pptaszni    schedule 16.04.2020