Вверх ↑
Разработчик
Ответов: 26151
Рейтинг: 2127
#1: 2009-05-29 23:12:04 ЛС | профиль | цитата
Можно попробовать вот такой код (реверс бит в байте написан на ассемблере, за основу взята схема Nica)


Add(MainForm,78857,294,203)
{
Left=21
Top=105
SavePosName="MyProject"
Point(Close)
}
Add(DoData,72744,490,385)
{
link(onEventData,62742:doCopyFromStream,[])
link(Data,6915400:Var2,[])
}
Add(MemoryStream,2940,420,259)
{
Point(doPosition)
link(SrcStream,5717:Stream,[])
}
Add(FileStream,5717,420,203)
{
link(onLoad,43116:doEvent1,[(465,209)(465,189)(282,189)(282,300)])
}
Add(For,58053,420,378)
{
Start=1
link(onEvent,60844:doGet,[(462,384)(462,432)(394,432)(394,454)])
link(onStop,72744:doData,[])
link(End,2940:Size,[])
}
Add(DataToFile,83748,511,441)
{
link(Stream,6915400:Var3,[(517,359)])
}
Add(Hub,43116,294,294)
{
OutCount=8
link(onEvent1,2940:doClear,[(364,300)(364,272)])
link(onEvent2,46227:doClear,[])
link(onEvent3,2940:doCopy,[(395,314)(395,265)])
link(onEvent4,5717:doClose,[(351,321)(351,216)])
link(onEvent5,34245:doData,[])
link(onEvent6,62742:doOpen,[(537,335)(537,377)])
link(onEvent7,58053:doFor,[(350,342)(350,384)])
link(onEvent8,62742:doClose,[(529,349)(529,384)])
}
Add(DataToFile,60844,406,441)
{
link(onGet,7325296:doInput,[])
link(Stream,2940:Stream,[(412,299)(426,299)])
}
Add(MemoryStream,46227,490,294)
{
}
Add(FileStream,62742,546,371)
{
Mode=1
Point(doCopyFromStream)
link(FileName,11995777:Text,[])
}
Add(DoData,34245,357,322)
{
Data=Integer(0)
link(onEventData,2940:doPosition,[(405,328)(405,279)])
}
Add(GetDataEx,6915400,483,350)
{
link(Data,46227:Stream,[])
}
Add(InlineCode,7325296,455,441)
{
@Hint=#11:Revers BYTE|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|3:var|17: A, B: Cardinal;|5:begin|29: A := Byte(ToInteger(Data));|3:asm|16: MOV B, 0;|16: SHL A, 24|18: MOV ECX, 8;|6:@@loo:|16: RCL A, 1;|16: RCR B, 1;|16: LOOP @@loo|16: SHR B, 24|6:end; |28: _hi_onEvent(onResult, B);|4:end;|0:|4:end.|
link(onResult,83748:doPut,[])
}
Add(DropFile,15956738,371,203)
{
link(onDropFile,5717:doOpen,[])
}
Add(Edit,11995777,546,294)
{
Left=25
Top=15
Width=120
Text="1.bin"
}


Быстрее можно сделать, читая Cardinal (Dword), но сложность возникает с длинами файлов некратными четырем
карма: 22

0