0

我写了一些使用socketcan(制作candump)的代码。使用此代码我初始化 socketcan。初始化后,我在终端中创建了一个 candump。我读入变量的那些值。现在我想将此变量与字符串进行比较。

字符串具有一定的格式。当我手动运行 candump 时,我得到以下格式:

can0 71A [1] 7F

(2x 空间)can0(2x 空间)71A(3x 空间)[1](2x 空间)7F。

我能够将终端输出读入变量(结果)

string result = //the string is loaded

** 现在我希望在变量“result”中的文本不等于以下字符串时执行一些代码:

"  can0  71A   [1]  7F" 

以下代码块用于进行比较。

if(result!="  can0  71A   [1]  7F"){
cout<<"input changes";
}

当我执行此代码并在总线上发送以下字符串时。与上面相同:

"  can0  71A   [1]  7F" 

代码打印:

"input changes"

(通常它不应该打印任何东西)

当我在总线上发送以下字符串时:

"  can0  19B   [1]  6A" 

它还打印:“输入更改”

(这很好)

我也尝试将空格更改为制表符,但没有任何结果。

知道问题可能是什么以及如何解决吗?

* 编辑 1 * 以下是我将值读入变量“结果”的代码。(如果您在我的代码中看到其他愚蠢的东西,请随时提出一些建设性的批评!我想从我的项目中学习。)

    std::string GetCmdOutput(const char * cmd)
{
        char buffer[128];
        string result;
        string different;
        FILE* pipe = popen(cmd,"r");
        int counter=0;
        if(!pipe) throw runtime_error("popen() failed!");
        try {
                if(fgets(buffer,128,pipe) !=NULL){
                        while(counter<2){

                                result +=buffer;
                                cout<<result + "\n";
                                if(result!="  can0  71A   [1]  7F" || result != "  can0  71A   [1]  04" )
                                {
                                        cout<<"changed!\n";
                                        different = result;
                                }
                        }
        }catch(...){
                pclose(pipe);
                throw;
        }

        pclose(pipe);
        pauseCan();
        return different;
}

亲切的问候,TM

4

0 回答 0