gpt4 book ai didi

arrays - F#匹配数组的开头

转载 作者:行者123 更新时间:2023-12-02 08:30:54 25 4
gpt4 key购买 nike

我有一个 Byte[] 缓冲区,它可能包含一个或多个数据帧,我需要读取第一个字节才能知道实际帧有多长。

这是我想做的“非工作”版本:

let extractFrame (buffer:byte[]) =
match buffer with
| [|head1;head2;head3;..|] when head2 < (byte)128 -> processDataFrame buffer head2
| <...others....>
| _ -> raise(new System.Exception())

基本上,我需要评估前三个字节,然后使用缓冲区和帧的实际长度调用 processDataFrame。根据 header ,帧可以是数据、控制等...

这可以通过任何类型的匹配(列表、序列……等等)来完成吗?还是我必须创建另一个只有 header 长度的小数组?(我想避免这种情况)。

最佳答案

如果你想使用匹配,你可以创建事件模式(http://msdn.microsoft.com/en-us/library/dd233248.aspx):

let (|Head1|_|) (buffer:byte[]) =
if(buffer.[0] (* add condition here *)) then Some buffer.[0]
else None

let (|Head2|_|) (buffer:byte[]) =
if(buffer.[1] < (byte)128) then Some buffer.[1]
else None

let extractFrame (buffer:byte[]) =
match buffer with
| Head1 h1 -> processDataFrame buffer h1
| Head2 h2 -> processDataFrame buffer h2
........
| _ -> raise(new System.Exception())

关于arrays - F#匹配数组的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com