Вверх ↑
Этот топик читают: Гость
Ответов: 1321
Рейтинг: 37
#1: 2011-02-12 09:45:55 ЛС | профиль | цитата
Как загрузить в свою программу бин файл для работы с ним.
Загрузка во время работы с программой
карма: 0

0
Ответов: 4641
Рейтинг: 334
#2: 2011-02-12 09:49:06 ЛС | профиль | цитата
Roma писал(а):
бин файл для работы с ним.

посмотреть элементы из раздела Файлы-Потоки
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 1321
Рейтинг: 37
#3: 2011-02-12 10:02:29 ЛС | профиль | цитата
а точно ,я просто давно этими элементами давно не пользовался
------------ Дoбавленo в 09.52:
спасибо
Ravilr,рас уж помог ,то помоги пожалуйста еще,я хочу найти CRC32 сумму файла
но используя только файловый поток это невозможно,что делать???
карма: 0

0
Ответов: 4641
Рейтинг: 334
#4: 2011-02-12 10:51:06 ЛС | профиль | цитата
Roma писал(а):
CRC32
CRC16_32
------------ Дoбавленo в 10.51:
изучаем свойства
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 1321
Рейтинг: 37
#5: 2011-02-12 10:59:59 ЛС | профиль | цитата
Да про этот элемент я знаю,я и спрашиваю как загрузить BIN файл чтоб найти crc32,через поток загрузить ,потом через конвертер ,а затем
crc32 ,но в начале надо загрузить
карма: 0

0
Ответов: 4641
Рейтинг: 334
#6: 2011-02-12 11:17:04 ЛС | профиль | цитата
Roma писал(а):
как загрузить BIN файл чтоб найти crc32,через поток загрузить ,потом через конвертер ,а затем
crc32

вот и загружай, потом через конвертор, а потом через CRC32
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 273
Рейтинг: 29
#7: 2011-04-07 10:27:20 ЛС | профиль | цитата
Да, и мне подскажите, как посчитать crc32 для огромного файла?
Есть компонент в инструментах, но он вычисляет crc только для строк.
А мне нужно посчитать для огромного файла. Как правильно это оформить?

Насколько я понял нужно отмапить файл в память, а дальше... а дальше можно читать ограниченными кусками - весь файл отмапить не смогу.
У каждого куска получится своя crc. А че дальше с ними делать?


А, все, разобрался... Все оказалось проще
Только crc неправильный был - пришлось полиномы искать. Заодно и узнал подробнее про сам алгоритм

Сделал себе компонент на будущее.
Add(MultiElementEx,1265720,637,343)
{
@Hint=#50:Вычисляет CRC32 для файла по стандартному полиному|
}
BEGIN_SDK
Add(EditMultiEx,15924144,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=230
Height=123
link(doCRC32,9801317:doEvent1,[(31,27)(31,55)])
link(CRC32,3622167:Value,[(27,137)(202,137)])
}
Add(CRC16_32,14272136,154,98)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
link(onResult,3622167:doValue,[])
}
Add(FileStream,10662988,70,49)
{
link(onLoad,5062690:doConvert,[(107,55)(107,104)])
link(FileName,15924144:FileName,[(76,35)(27,35)])
}
Add(StreamConvertor,5062690,112,98)
{
link(onResult,14272136:doCalcCRC,[])
link(Data,10662988:Stream,[(118,90)(76,90)])
}
Add(Hub,9801317,42,49)
{
link(onEvent1,10662988:doOpen,[])
link(onEvent2,10662988:doClose,[])
}
Add(Memory,3622167,196,98)
{
link(onData,15924144:onCRC32,[(240,104)(240,27)])
}
END_SDK


code_23259.txt


Нет. Все-таки грабли еще есть. Этот алгоритм грузит в память весь файл и его обсчитывает. Нужен маппинг - памяти всегда мало.
Копаю дальше.

Добавил маппинг
Add(MultiElementEx,1265720,420,343)
{
@Hint=#50:Вычисляет CRC32 для файла по стандартному полиному|
}
BEGIN_SDK
Add(EditMultiEx,15924144,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=237
Height=165
link(doCRC32,9801317:doEvent1,[(31,27)(31,55)])
link(CRC32,5481093:Var1,[(27,137)])
}
Add(CRC16_32,14272136,161,98)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
link(onResult,3622167:doValue,[])
}
Add(StreamConvertor,5062690,119,98)
{
link(onResult,14272136:doCalcCRC,[])
link(Data,2681121:Stream,[(125,90)(83,90)])
}
Add(Hub,9801317,42,49)
{
OutCount=4
link(onEvent1,2681121:doOpen,[])
link(onEvent2,5062690:doConvert,[(68,62)(68,104)])
link(onEvent3,2681121:doClose,[])
link(onEvent4,4750086:doData,[(63,76)(63,153)])
}
Add(Memory,3622167,203,98)
{
}
Add(SharedStream,2681121,77,49)
{
link(FileName,15924144:FileName,[(83,35)(27,35)])
}
Add(DoData,4750086,203,147)
{
link(onEventData,15924144:onCRC32,[(244,153)(244,27)])
link(Data,5481093:Var2,[])
}
Add(GetDataEx,5481093,203,132)
{
link(Data,3622167:Value,[])
}
END_SDK


crc стали просчитываться моментально, но неправильно
Очевидно он считает crc только для спроецированного куска файла. При этом crc маленьких файлов (50кб) правильные - влазят в этот кусок.
Так не пойдет.
Надеялся, что механизм проецирования сам автоматом будет двигать зону проекции по файлу.
карма: 0

0
файлы: 1code_23259.txt [1.2KB] [133]
Разработчик
Ответов: 26324
Рейтинг: 2147
#8: 2011-04-07 11:28:32 ЛС | профиль | цитата
tomas писал(а):
но он вычисляет crc только для строк

Вопрос -- а чем отличается ASCII строка от бинарного файла
карма: 22

0
Ответов: 273
Рейтинг: 29
#9: 2011-04-07 12:32:57 ЛС | профиль | цитата
nesco писал(а):
Вопрос -- а чем отличается ASCII строка от бинарного файла

Всем. Строка - текстовая, файл бинарный.
При этом строки ограничены размером памяти, а файл - размером диска. И что характерно, размер диска почти всегда больше
В этом и засада.
Конвертор потока в hex + подсчет crc в режиме hex работают отлично, но размер файла ограничен оперативкой.
Мне надо посчитать CRC32 для файла, размером больше оперативки. Пока копаюсь с маппингом. Надо почитать, как он устроен. Автоматом не работает.


Угу, кажется догнал.
Все работает автоматом, но размер области проецирования нужно выделять больше файла.
При ее увеличении постепенно все более большие файлы начинают обретать правильный crc.

Я всегда думал, что маппинг - это когда специальным механизмом в память проецируется небольшой кусок файла, и этот механизм двигает окно проецирования по файлу в зависимости от того, к какой части файла обращаются.
Оказалось все проще - просто проецируется весь файл (или кусок) в виртуальную память.

Думаю дальше справлюсь сам - осталось механизм автоматического определения размера прикрутить.


Ага. Справился. Вот алгоритм просчета crc32 со стандартным полиномом и мапингом.
Add(MultiElementEx,1265720,420,343)
{
@Hint=#50:Вычисляет CRC32 для файла по стандартному полиному|
}
BEGIN_SDK
Add(EditMultiEx,15924144,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=251
Height=214
link(doCRC32,9801317:doEvent1,[(31,27)(31,55)])
link(CRC32,5481093:Var1,[(27,179)])
}
Add(CRC16_32,14272136,168,140)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
link(onResult,3622167:doValue,[])
}
Add(StreamConvertor,5062690,126,140)
{
link(onResult,14272136:doCalcCRC,[])
link(Data,2681121:Stream,[])
}
Add(Hub,9801317,42,49)
{
OutCount=4
link(onEvent1,10646425:doWork2,[])
link(onEvent2,10615924:doValue,[(118,62)(118,97)])
link(onEvent3,4306968:doWork2,[])
link(onEvent4,12286570:doEvent1,[])
}
Add(Memory,3622167,210,140)
{
}
Add(SharedStream,2681121,126,49)
{
CoreName="ass"
Point(CountFileBlock)
Point(PageMem)
link(onOpen,10615924:doClear,[(171,55)(171,104)])
link(FileName,15924144:FileName,[(132,35)(27,35)])
link(PageMem,10615924:Value,[(160,40)(220,40)(220,130)(188,130)])
}
Add(DoData,4750086,210,189)
{
link(onEventData,15924144:onCRC32,[(251,195)(251,27)])
link(Data,5481093:Var2,[])
}
Add(GetDataEx,5481093,210,174)
{
link(Data,3622167:Value,[])
}
Add(Memory,10615924,182,91)
{
Default=Integer(1)
Point(Data)
link(Data,2681121:CountFileBlock,[(188,86)(153,86)])
}
Add(Hub,12286570,70,70)
{
OutCount=4
link(onEvent1,10646425:doWork3,[(95,76)])
link(onEvent2,5062690:doConvert,[(113,83)(113,146)])
link(onEvent3,4306968:doWork3,[(102,90)])
link(onEvent4,4750086:doData,[(102,97)(102,195)])
}
Add(HubEx,10646425,91,49)
{
link(onEvent,2681121:doOpen,[])
}
Add(HubEx,4306968,98,63)
{
link(onEvent,2681121:doClose,[])
}
END_SDK



Что делает: мапит 1 блок, смотрит сколько надо, закрывает файл и еще раз мапит, но полностью весь файл.
Мне хватит. Но если кто-то попытается сделать на его основе утилиту для массовой обработки - можно немного поднять скорость, если вместо двойного мапинга рассчитывать размер блока перед открытием "вручную". Либо при первом мапинге смотреть, если текущий размер >= необходимого - не мапить второй раз.
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#10: 2011-04-07 13:29:44 ЛС | профиль | цитата
tomas писал(а):
Строка - текстовая, файл бинарный

Откуда такие познания по представлению строк в HiAsm-e
Объясни мне, что такое строка, как ты себе ее представляешь
И чем отличается тип PByte от типа PChar
(Млин, чувствуюяя я, что скоро мне придется писать развернутое описание по ASCII строкам)

карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#11: 2011-04-07 13:31:39 ЛС | профиль | цитата
nesco писал(а):
И чем отличается тип PBite от типа PChar

Гм, а что такое PBite? Ни гугл, ни яндекс не дает ответа
карма: 10
0
Разработчик
Ответов: 26324
Рейтинг: 2147
#12: 2011-04-07 13:36:50 ЛС | профиль | цитата
Assasin писал(а):
Гм, а что такое PBite?

Очепятка, торопился я -- PByte надо было написать
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#13: 2011-04-07 13:58:45 ЛС | профиль | цитата
nesco писал(а):
скоро мне придется писать развернутое описание по ASCII строкам)
А поможет ? Это результат прелестей кубикостроения.
tomas писал(а):
Строка - текстовая, файл бинарный.
Это для тебя, когда ты смотришь на экран. А для процессора и то и другое - набор единичек и нулей.
И в памяти это единички и нолики.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26324
Рейтинг: 2147
#14: 2011-04-07 15:23:24 ЛС | профиль | цитата
Tad писал(а):
Это результат прелестей кубикостроения

Но никто же не мешает развиваться дальше, было бы желание
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#15: 2011-04-07 15:30:13 ЛС | профиль | цитата
nesco писал(а):
Но никто же не мешает развиваться дальше, было бы желание

И думаю, я - вполне подходящий этого пример
карма: 10
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)