Сообщений: 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
Эх в битовых операциях я еще мало разобрался(