Здравейте,
Необходима ми е помощ. Опитвам се да декодирам и кодирам едни масиви...
Декодирането - май е добре. Ама кодирането - направо ще ...
Тъй... Имаме един масив от байтове (Byte), деклариран по следния начин
var
CompactArray:array [0..20] of byte;
Четем го от някъде си... да предположим че е запълнен по следния начин
'FF FF FF FF FF FF FF FF FF FF FF 7F 00 00 E0 FF FF FF FF FF FF '
Същият масив, трябва да се преобразува в друг масив от битове, (YArray :Array [0..167] of Boolean;) като се приложи съответно отместване (виж процедурата по-долу) .
Не мога да направя обратното преобразуване Все се получават различни резултати...
procedure SoMeProcedure(Bias:Integer);
var
iCount, z, k, j, m:Integer;
OneInt:Byte;
begin
j:=0;
for iCount:=0 to 20 do
begin
z:=1;
for k := 0 To 7 do
begin
m := 8*j + k - Bias;
if (m < 0) then m := m + 168;
if (m > 167) then m := m - 168;
OneInt:=CompactArray[iCount];
if (OneInt and Z)=Z then
YArray [m] := 1
else
YArray [m] := 0 ;
Inc(z,z); //Z:=Z*2
end;
Inc(j)
end;
end;
В конкретния случай YArray съдържа
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
Когато се опитвам да напиша "обратната" процедура, която превръща YArray в CompactArray,
получавам най-различни глупости, но не и изходните стойности...
А да - Bias в конкретния случай е -2 (минус 2, демек БГ отместването в часове от UNC/GMT)
Някой да помогне?!?
|