C++使用istringstream将int读取为无符号字符
C++ Reading ints as unsigned chars using 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
。。。
正在进行什么类型的铸造?
没有强制转换,这种行为是由于重载造成的。
对于char
类型,std::basic_istream::operator>>
恰好被重载,一次只提取一个字符——1
,其ASCII值为49
。这是你想要的行为,当你阅读单个字符时,假设你想要的正是这个,当你提取到一个字符类型时。
要将文本读取为以空格分隔的数字,必须使用较大的类型进行提取,例如unsigned short
或std::uint16_t
,然后强制转换为unsigned char
。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中