【问题标题】:Reading file of character data with while loop使用while循环读取字符数据文件
【发布时间】:2020-11-18 03:30:04
【问题描述】:

我有一个包含如下数据的文件:

1F B8 08 08 00 00 00 00

我正在将它读入一个 int,将它转换为一个字符,并将它存储在一个数组中。

int n, i = 0;
char c;
while (ifs >> std::hex >> n) {
   c = static_cast<unsigned char>(n);
   r[i++] = c;
}

工作正常。如果数据中没有空格,我该怎么做,即

1FB8080800000000

上面的代码只是将 n 填充到 maxint 并退出。我可以使用 getc 等创建一些东西,但我希望 C++ 代码能够处理这两种情况。

【问题讨论】:

  • C++ 代码完全能够一次读取一个字符,例如getc。你知道怎么做吗?

标签: c++ while-loop ifstream getc


【解决方案1】:

您可以将数字读取为字符串,并使用std::setw 来限制读取的字符数。然后使用std::stoi转换成整数:

std::string ns;
while (ifs >> std::setw(2) >> ns) {
    r[i++] = static_cast<unsigned char>(std::stoi(ns, nullptr, 16));
}

适用于空格分隔和非空格分隔的输入。

【讨论】:

  • 我正在尝试使用code while (ifs >> std::setw(2) >> std::hex >> i) code 其中 i 是一个整数。返回 0x7FFFFFFF。我想避免所有的字符串/铸造 rigamarole。为什么该代码不返回十六进制字符?
猜你喜欢
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2013-06-05
  • 2023-02-07
  • 2021-06-22
相关资源
最近更新 更多