1

这个问题可能看起来有点晦涩难懂,但我会尝试用外行的话来分解它。

假设我有一个包含 24 个Byte值的数组,仅包含0or 1

011000100000001000000111

该数组在逻辑上分为每组四个值的组,这给了我们:

0110 0010 0000 0010 0000 0111

现在,我想数一数,有多少后续组将至少一个值设置为1. 在我提供的示例中,我们有2后续组。

我应该如何以编程方式进行?

4

2 回答 2

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功能。

于 2012-04-25T17:53:59.347 回答
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;
于 2012-04-25T16:27:41.590 回答