C++ Чтение int как неподписанных символов с использованием istringstream

Когда используешь std::istringstream при чтении значений серых пикселей из файла (0-255) я замечаю странное поведение и не могу понять, что происходит.

Чтобы сохранить память, я хочу прочитать эти значения в беззнаковые символы (так как они имеют одинаковый диапазон 0-255). Однако, похоже, что происходит какое-то приведение / усечение.

Входной файл:

194
194
155
155
124
194

Вот мой код:

getline(fp, line); 
unsigned char temp;
istringstream iss(line);
iss >> temp;

Когда значение в файле 194например, целочисленное значение для temp 49...

Какой тип кастинга происходит?

1 ответ

Решение

Там нет литья, это поведение из-за перегрузки.

std::basic_istream::operator>> бывает перегружен для char типы, извлекающие только один символ за раз - 1 ASCII значение которого равно 49, Это поведение, которое вы хотите, когда вы читаете отдельные символы, и предполагается, что вы хотите именно это, когда вы извлекаете в символьный тип.

Чтобы прочитать текст как разделенные пробелами числа, вы должны использовать больший тип для извлечения, например unsigned short или же std::uint16_t а затем приведен к unsigned char,

Другие вопросы по тегам