这:

#include <iostream>
#include <sstream>
#include <inttypes.h>

using namespace std;

int main (void) {
    istringstream iss("123 42");
    int8_t x;
    while (iss >> x) {
        cout << x << endl;
    }
    return 0;
}

产生:
1
2
3
4
2

但是我想要:
123
42

强制转换iss >> (int)x(我最初使用char尝试过此操作)会给我“错误:二进制表达式('istringstream'(又名'basic_istringstream')和'int')的无效操作数”(lang)或“错误:模棱两可的重载代表'operator >>'“(g++)。

有没有一种方法可以将数值作为数字直接读入 8位类型,还是必须使用中介存储?

最佳答案

您必须使用中间类型或自己进行解析。所有字符类型(char,有符号字符和无符号字符)都被视为文本元素,而不是整数。 int8_t可能只是其中之一的typedef,这就是代码失败的原因。

笔记:

  • 输出将遇到相同的问题。
  • 不要使用C样式强制转换,它们几乎只会导致错误。
  • 在输入操作无效之前检查EOF,然后需要检查是否失败。
  • 关于c++ - istringstream十进制整数输入到8位类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25230473/

    10-11 18:18