Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 21:15 08.06.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема Много ли съм тъп?  
Автор ИвKo (особняк)
Публикувано06.07.07 13:41



 

Здравейте,
Необходима ми е помощ. Опитвам се да декодирам и кодирам едни масиви...
Декодирането - май е добре. Ама кодирането - направо ще ...

Тъй... Имаме един масив от байтове (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)

Някой да помогне?!?



Тема Re: Много ли съм тъп?нови [re: ИвKo]  
Автор Formal (незнаещ)
Публикувано06.07.07 17:42



Абе много сложно си го направил...
Аз бих написал нещо такова:


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
bytes : 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);
bits : Array[0..21 * 8 - 1] of Boolean;

procedure BytesToBits(bias : Integer);
var i, j, k : Integer;
begin
k := -bias;
if k < 0 then k := k + Length(bits);
if k > High(bits) then k := k - Length(bits);
for i := 0 to High(bytes) do
for j := 0 to 7 do begin
bits[k] := bytes[ i ] and (1 shl j) <> 0;
k := (k + 1) mod Length(bits);
end;
end;

procedure BitsToBytes(bias : Integer);
var i, j, k : Integer;
begin
k := -bias;
if k < 0 then k := k + Length(bits);
if k > High(bits) then k := k - Length(bits);
for i := 0 to High(bytes) do begin
bytes[ i ] := 0;
for j := 0 to 7 do begin
bytes[ i ] := bytes[ i ] or (Byte(bits[k]) shl j);
k := (k + 1) mod Length(bits);
end;
end;
end;

// за тест:
var i : Integer;
begin
BytesToBits(25);
for i := 0 to High(bits) do begin
if i mod 21 = 0 then writeln;
write(byte(bits[ i ]));
end;
BitsToBytes(25);
writeln;
for i := 0 to High(bytes) do begin
write(IntToHex(bytes[ i ], 2), ' ');
end;
readln;
end.




Тема Re: Много ли съм тъп?нови [re: Formal]  
Автор ИвKo (особняк)
Публикувано07.07.07 09:59



Явно е че съм тъп


Хиляди благодарности !!!




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.