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
,