这个问题可能看起来有点模糊,但我会尝试用非专业人的术语来分解。
假设我有24个Byte
值的数组,仅包含0
或1
:
011000100000001000000111
数组在逻辑上被划分为每组四个值的组,这给了我们:
0110 0010 0000 0010 0000 0111
现在,我想算一下,有多少后续群组至少一个值设置为1
。在我提供的示例中,我们有2
个后续组。
我应该如何以编程方式进行此操作?
答案 0 :(得分:5)
以Arnaud的答案为基础,这个答案有正确的想法,但实际上并没有做OP所要求的:
function CountNonNullGroupSequenceLength(Values: PByte; ValuesCount: integer): integer;
var Groups: PIntegerArray;
i, counter: integer;
begin
Groups := Values;
result := 0;
counter := 0;
for i := 0 to (ValuesCount shr 2)-1 do
if Groups[i]<>NULLGROUP then
inc(counter)
else begin
result := max(result, counter);
counter := 0;
end;
result := max(result, counter);
end;
确保将Math
放入使用列表中,以便获得Max
功能。
答案 1 :(得分:2)
由于一个组是4个字节,这就像是一个整数的4个字节的类型转换。
例如:
const
NULLGROUP = 0;
function CountNonNullGroups(const Values: TByteArray): integer;
var Groups: TIntegerArray absolute Values;
i: integer;
begin
result := 0;
for i := 0 to (length(Values) shr 2)-1 do
if Groups[i]<>NULLGROUP then
inc(result);
end;
或者用指针:
function CountNonNullGroups(Values: PByte; ValuesCount: integer): integer;
var Groups: PIntegerArray;
i: integer;
begin
Groups := Values;
result := 0;
for i := 0 to (ValuesCount shr 2)-1 do
if Groups[i]<>NULLGROUP then
inc(result);
end;