我写了一些使用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