1

我对 c++ 相当陌生,并且遇到了一个问题,即通过单独搜索我找不到解决方案。

问题是,为什么 istringstream 在下面的循环中永远不会改变它的值?

它从 dirs[0] 和 dirs[1] 中获取值,并且永远不会将它们更改为递增的 int i。顺便提一句。dirs[ i ] 和 dirs [ i + 1 ] 中的值存储为十六进制值(例如 0F9C8924)。

下面是我的最新设置,我尝试了其他几种方法,但没有成功,例如在循环中使用 istringstream 并使用 ios_base::trunc 等。

等等,确实有不同的值并且dirs[ i ]被正确读取,但是当试图通过 istringstream 将字符串十六进制转换为无符号整数时,它永远不会采用新值。

unsigned int f;
unsigned int t;
istringstream ss;
istringstream ss2;
for( int i = 0; i < count; i+=3 ) {
    ss.clear();
    ss2.clear();
    ss.str( dirs[ i ] );
    ss2.str( dirs[ i + 1 ] );

    ss >> f;
    ss2 >> t;



    // do something else with dirs[ i + 3 ], not relevant
}

countdirs是一个全局变量,count在另一个函数中增加,它的值在dirs.

很抱歉,如果以前有人问过这个问题,但我发现的解决方案对我不起作用。比如ss.clear()while( ss >> f )

提前感谢您提供的任何帮助。

4

3 回答 3

5

这个问题有点令人困惑。你的意思是输入是像“0F9C8924”这样的字符串吗?

如果是这样,请尝试ss >> hex >> f;

您应该在代码中编写一些错误处理,以便您知道何时以及为什么会出错。ss.clear()只是盲目地清除错误标志,而不知道为什么首先设置它们。

于 2011-05-15T16:01:21.667 回答
0

尝试这个:

unsigned int f;
unsigned int t;
for( int i = 0; i < count; i+=3 )
{
    istringstream ss1( dirs[ i ] );
    istringstream ss2( dirs[ i + 1 ] );

    ss1 >> f;
    ss2 >> t;

    // do something else with dirs[ i + 3 ], not relevant
}

我假设您认为 clear() 会清空流。str(<string>) 会将一些文本设置到流中。可能最好在循环内声明字符串流。这意味着它们在循环结束时被销毁,并在每次进入循环时重新创建。然后你可以用那里的构造函数初始化它们。

于 2011-05-15T16:20:28.810 回答
0

这将打印出十六进制字符串的十进制值。这是你想要的吗?

#include <sstream>
#include <iostream>
using std::istringstream;
unsigned int f;
unsigned int t;
const char * dirs[12] = { 
    "0x15", "0x16", "dummy", 
    "0x11", "0x12", "dummy",
    "0x115", "0x116", "dummy",
    "0x111", "0x112", "dummy"
    };
unsigned int count = sizeof(dirs) / sizeof(const char *);
int main(int, char **) {
    for( unsigned int i = 0; i < count; i+=3 )
    {
        istringstream ss1( dirs[ i ] );
        istringstream ss2( dirs[ i + 1 ] );

        ss1 >> std::hex >> f;
        ss2 >> std::hex >> t;
        std::cout << "f is " << f << std::endl;
        std::cout << "t is " << t << std::endl;

        // do something else with dirs[ i + 2 ], not relevant
    }
    std::cin.get();
    return 0;
}
于 2011-05-15T17:33:18.423 回答