首页 > 解决方案 > 使用while循环读取字符数据文件

问题描述

我有一个文件,其中包含如下数据:

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++while-loopifstreamgetc

解决方案


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

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

将使用空格分隔和非空格分隔的输入。


推荐阅读