C ++使用istringstream将整数读取为无符号字符

C++ Reading ints as unsigned chars using istringstream

当使用 std::istringstream 从文件 (0-255) 读取灰色像素值时,我注意到一个奇怪的行为,我无法理解发生了什么。

为了节省内存,我想将这些值读入无符号字符(因为它们具有相同的 0-255 范围)。但是,似乎有某种 casting/truncation 正在发生。

输入文件:

194
194
155
155
124
194

这是我的代码:

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

当文件中的值为194时,例如temp的整数值为49...

正在进行什么类型的选角?

没有强制转换,此行为是由于过载造成的。

std::basic_istream::operator>>恰好为char类型重载,一次只提取一个字符-1,其ASCII值为49。这是您想要的行为,当您读取单个字符时,并且假设您在提取到字符类型时正是您想要的。

要将文本读取为以空格分隔的数字,您必须使用更大的类型进行提取,例如unsigned shortstd::uint16_t 然后转换为 unsigned char.