C ++使用istringstream将int作为无符号字符读取

时间:2015-11-18 16:48:47

标签: c++ file-io casting unsigned-char 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 个答案:

答案 0 :(得分:3)

没有投射,这种行为是由于超载造成的。

std::basic_istream::operator>>恰好为sys.argv类型重载,一次只提取一个字符 - default=argparse.SUPPRESS,其ASCII值为char。这是您想要的行为,当您正在阅读单个字符时,如果您正在提取字符类型,那么您需要这样做。

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