0

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

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,因为虽然列表中的每个元素都存在于有效负载中,但 item2 元素不会连续出现在有效负载列表中。

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

谢谢

4

1 回答 1

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] 语法每次都会创建一个新列表),因此如果您有内存方面的考虑,应该对其进行修改。

于 2015-11-25T10:00:22.277 回答