【发布时间】:2023-04-05 12:44:01
【问题描述】:
我在 c 中工作,我在这方面有点新。 我有这个字符串:
7EB3A50110140F3955025607EB7A50110140F3957730188
数据包从“7E”开始,所以我使用 strtok(string,"E") 将这两个数据包分开
B3A50110140F3955025607
B7A50110140F39577301887
现在我想消除每个标记的 A、B、F,所以我想出了这个想法:
while(token!=NULL)
{
cout<<"addrT:"<<&token<<" value: "<<token<<"\n";
token=strtok(NULL,"E");
char *token1=strtok(token,"ABCDEF");
while(token1!=NULL){
token=strtok(NULL,"ABCDEF");
}
cout<<"addrT1:"<<&token<<" value: "<<token<<"\n";
}
它根本不起作用,所以我想用这段代码检查每个令牌的地址:
token=strtok(string,"E");
while(token!=NULL)
{
cout<<"addrT:"<<&token<<" value: "<<token<<"\n";
token=strtok(NULL,"E");
char *token1=strtok(token,"ABCDEF");
cout<<"addrT1:"<<&token<<" value: "<<token<<"\n";
}
我发现第二个令牌使用与我的第一个令牌相同的内存地址,那么我应该怎么做才能获得具有值的新令牌?
提前致谢
【问题讨论】:
-
如果你的数据中间有“E”怎么办?
-
“7E”就像是数据包的开始,所以我现在唯一的想法就是使用“E”。我接受任何建议!
-
如果数据包中间有一个“E”,例如“E5”、“1E”等,你所做的就行不通了。大概每一对字符代表一个字节,因此请成对使用字符。
-
为什么不遍历字符串来搜索“E7”,而不仅仅是“E”?
-
strtok()依靠静态变量来跟踪字符串中的当前解析位置。此实现需要在开始第二个字符串之前完全解析一个字符串。如果您的编译器支持它,请使用strsep(),但您的代码将不可移植。您可以根据需要编写自己的实现来解析给定的字符串并将其拆分为标记。