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 short
或 std::uint16_t
然后转换为 unsigned char
.
当使用 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 short
或 std::uint16_t
然后转换为 unsigned char
.