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

C++ Reading ints as unsigned chars using istringstream

本文关键字:无符号 字符 读取 int 使用 istringstream C++      更新时间:2023-10-16

当使用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。。。

正在进行什么类型的铸造?

没有强制转换,这种行为是由于重载造成的。

对于char类型,std::basic_istream::operator>>恰好被重载,一次只提取一个字符——1,其ASCII值为49。这是你想要的行为,当你阅读单个字符时,假设你想要的正是这个,当你提取到一个字符类型时。

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