Сообщений: 220
	Тем: 19
	Зарегистрирован: Oct 2011
	
Репутация: 
2,462
	 
	
	
		Mifesto Написал:а ReadBitFlags можно функцию?
или хотя бы что читает и в каком формате возвращает.
[src=pascal]function TGamePacket.ReadBitFlags(Count: Integer = 0): TGamePacketBitFlags;
var
  N, I: Integer;
  B: array of Byte;
begin
  N := ReadH;
  if (N < 1) or ((Count > 0) and (N <> Count)) then raise Exception.Create('Invalid bit flags count!');
  I := Ceil(N / 8);
  SetLength(B, I);
  Move(FData[FCursor], B[0], I);
  Inc(FCursor, I);
  SetLength(Result, N);
  for I := 0 to N - 1 do
    begin
      Result[I] := (B[I div 8] shr (7 - (I mod 8))) and 1 = 1;
    end;
end;[/src]
	
 
	
	
hLaPEx, Evermore, hAuthD, L2on, ...
	
	
 
 
	
	
	
		
	Сообщений: 527
	Тем: 17
	Зарегистрирован: Oct 2010
	
Репутация: 
1,919
	 
	
	
		[SRC="pascal"]
Result[I] := (B[I div 8] shr (7 - (I mod 8))) and 1 = 1;
[/SRC]
Вот мне интересно выделенное сравнение, зачем? Или это что бы паскаль записал результат первой операции как bool?
	
	
	
	
	
 
 
	
	
	
		
	Сообщений: 220
	Тем: 19
	Зарегистрирован: Oct 2011
	
Репутация: 
2,462
	 
	
	
		Mifesto Написал:[SRC="pascal"]
Result[I] := (B[I div 8] shr (7 - (I mod 8))) and 1 = 1;
[/SRC]
Вот мне интересно выделенное сравнение, зачем? Или это что бы паскаль записал результат первой операции как bool?
Да, чтобы преобразовать Integer в Boolean.
Код:
TGamePacketBitFlags = array of Boolean;
 
	
	
hLaPEx, Evermore, hAuthD, L2on, ...
	
	
 
 
	
	
	
		
	Сообщений: 527
	Тем: 17
	Зарегистрирован: Oct 2010
	
Репутация: 
1,919
	 
	
	
		Эх в битовых операциях я еще мало разобрался(