【问题标题】:Specman: How to find if a list of bytes exists in another list taking order of the list into accountSpecman:如何在考虑列表顺序的情况下查找另一个列表中是否存在字节列表
【发布时间】:2015-11-23 19:28:04
【问题描述】:

我有一个有效载荷,它是一个字节类型列表:

var payload : list of byte;
payload= {1;2;3;4;5;6};

var item1 :list of byte;
item = {3;4;5};


var item2 :list of byte;
item = {1;4};

我想实现一个代码来检查一个列表是否是另一个列表的子列表。使用“if ..in..”并不完全有效,因为它没有考虑项目的顺序或它们是否连续出现。我想要做以下事情:

  • if (item1 in payload) ...... 应该返回 TRUE。项目以相同的顺序存在于有效负载中。

  • if (item2 in payload) ......应该返回FALSE,因为虽然列表中的每个元素都存在于payload中,但是item2元素并没有连续出现在payload列表中。

有没有简单的方法来实现这一点?为此,specman 中必须有一个内置函数。

谢谢

【问题讨论】:

  • 其实item2中的顺序也是一样的(14之前,和payload一样)。您可能不仅指顺序,还指连续出现的项目?请澄清您的问题。
  • @YuriTsoglin 我认为他的意思是他想检查一个列表是否是一个更大列表的子列表。
  • @YuriTsoglin 是的,我想检查它们是否连续出现。谢谢

标签: specman e


【解决方案1】:

以下代码应该可以工作:

if (item.size()==0) {return TRUE};
for i from 0 to payload.size()-item.size() {
    if (item == payload[i..i+item.size()-1]) {
        return TRUE;
    };
};
return FALSE;

请注意,此代码在内存方面非常昂贵(list[a..b] 语法每次都会创建一个新列表),因此如果您有内存方面的考虑,应该对其进行修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多