当使用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
...
正在进行什么类型的铸造?
答案 0 :(得分:3)
没有投射,这种行为是由于超载造成的。
std::basic_istream::operator>>
恰好为sys.argv
类型重载,一次只提取一个字符 - default=argparse.SUPPRESS
,其ASCII值为char
。这是您想要的行为,当您正在阅读单个字符时,如果您正在提取字符类型,那么您需要这样做。
要将文本读取为以空格分隔的数字,您必须使用更大的类型进行提取,例如1
或49
,然后转为unsigned short
。