crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Приветствую всех.
Помогите пожалуйста портировать код с++ на Visual FoxPro.
Эта версия crc64 на фоксе возращает одни нули. [i]Исправлено 1 раз(а). Последнее : NOVLAN, 22.12.15 18:11 |
Re: crc64 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Такие большие числа фокс не сьест просто так, в нем Integer 32 битный.
(См. например, forum.foxclub.ru ) |
Re: crc64 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не надо этого делать. Лучше почитай как делаются fll и допиши то что нужно для того чтобы именно сишный код и вызывать из фокса. Благо он возвращает "строковое представление", а не 64-битное число, которое фокс не сможет переварить (разве что извратиться с Currency типом). Будет надёжно, быстро, правильно. Портировать это на фокс, попутно прикручивая самодельные вычисления для 64-битных целых - ненадёжно, медленно и убого. Теоретически, конечно, можно и без fll обойтись - взять из скомпилированной сишной проги машинный код данной функции и хитрым способом вставить в фокс - но это всяко сложнее чем пойти по пути создания fll... Впрочем, можно и не fll а ординарную dll сделать и подключать через DECLARE ... IN ... Тут особой нужды именно в доступе к фоксовому АПИ нету... ------------------ WBR, Igor |
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Если не получится с ассемблерной вставкой (forum.foxclub.ru), буду воять fll-ку.
Спасибо. |
Re: crc64 | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Что-то не пойму. Особый спец алгоритм используется?
Вообще на форуме масса ссылок на формирование хэша от строки и на готовые варианты через API или FLL. MD5*, SHA1, SHA2 - поиск по форуму. Про ассемблерную вставку от Леонида скажу: все здорово работает. Но при массированном использовании утечка памяти что-ли. Валит приложение (а может и систему - не помню деталей). ++ forum.foxclub.ru Исправлено 1 раз(а). Последнее : Taran, 21.12.15 23:27 |
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Та не. Вроде обычный CRC64.
Хотелось бы именно 64-битный хэш. У MD5, SHA и т.п. хэши от 128-и. Мне 128 и 256 много, а 32 мало.
Спасибо за предостережение. Исправлено 1 раз(а). Последнее : NOVLAN, 22.12.15 01:12 |
Re: crc64 | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
По моему - зря заморачиваешься. Напишешь даже если что - попользуешь и бросишь. Ибо есть стандартные библиотеки и пр.. А у них скорее всего и скорость будет превосходить твой вариант. А хранить чуток лишнего? Так это нынче не проблема. Насчет предостережения от ассемблерной вставки. Вероятно тебе это и не помешает. У меня просто задача крутилась круглосуточно и за 7-10 дней вываливалась. Перешел на API и проблема исчезла. |
Re: crc64 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Зато некоторые из них реализуются в штатном виндовом cryptoAPI - т.е. можно обойтись только DECLARE DLL. Для MD5 есть пример аналогично будет и для разных вариантов SHA (просто подставить другие значения константы "кода алгоритма", ну и размеры буфера подправить по размеру хэша). 64бита хэша всё же весьма мало на сегодняшний день... ------------------ WBR, Igor |
Re: crc64 | |
---|---|
Рома Автор Сообщений: 1079 Дата регистрации: 06.06.2001 |
Не мучайся c fll - там обычная dll получается 2,5Kb без зависимостей от C runtime и даже kernel32 |
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Я уже больше 20-ти лет "заморачиваюсь". Ну нравится мне это дело. ;) Пока есть желание, силы и усидчивость, предпочитаю нативный код. Да и задача не срочная. Не было бы времени на разработку - в 5 сек. прикрутил бы стороннюю fll-ну и забыл бы. Но это же не кашерно. |
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Мне бы для уникального идентификатора блока данных хватило бы. |
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
А мне одинаково что fll что dll всё равно Мрак Хотя может как-то без студии, с консоли скомпилировать получится... |
Re: crc64 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Можно все и на "чистом" фоксе реализовать, будет помедленнее, чем на си. Вместо одной Integer-переменной надо две использовать (пару, старшее и младшее слово), констант разных - тоже пары. Сдвиги, тесты бита, сделать с учетом этого...
|
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Мне суперскорось не нужна. На счет 2-х integer-ов меня тоже такая мысль посещала, когда сравнивал коды CRC16 и CRC32, но как воплотить пока не придумал.
|
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Роман! Я сразу не заметил вложения - Спасибо! Это просто праздник какой-то! |
Re: crc64 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
А че там воплощать? Например, напиши функцию, реализующую:
BITRSHIFT2(par1, par2) - сдвигает эту пару вправо на 1 бит (перенос из левого слова в правое слово приделаешь). Возвращает младшее слово BITRSHIFT2(par1, par2, 1) - сдвигает эту пару вправо на 1 бит (перенос из левого слова в правое слово приделаешь). Возвращает старшее слово Пример использования с 64 битным значением представленным парой 2х Integer-32 {y,x}, вместо BITRSHIFT: x = ... && младшие 32 бит y = ... && старшие 32 бит * сдвигаем вправо всю пару {y,x}: a = BITRSHIFT2(x, y) b = BITRSHIFT2(x, y, 1) x = a y = b Надеюсь, идея понятна, просто немного внимательнее надо относиться к подобным парам {I,I}, а не просто: x = BITRSHIFT2(x, y) && Внимание! Исходный x "испорчен", но он нужен следующему вызову сдвигателя, которому нужен именно исходный {y,x} y = BITRSHIFT2(x, y, 1) Ну, и другие нужные операторы также сделать. (Можно и на символьных строках типа Q сдедать, но в случае "64 бита" проще конструировать операторы и из пар 32-переменных) |
Re: crc64 | |
---|---|
NOVLAN Сообщений: 103 Откуда: Харьков Дата регистрации: 16.11.2005 |
Спасибо за идею. Попробую реализовать.
|
Re: crc64 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не советую для продуктива. Как разминку для ума - дазарадибога
Конечно - компиляторов то хватает - gcc тот же. win64 тебе не нужен, его фокс скушать не смогёт. ------------------ WBR, Igor |
Re: crc64 | |
---|---|
bd Сообщений: 153 Откуда: Aktau Дата регистрации: 23.02.2006 |
Если важна только длина хэша, то можно разбить данные на две части и для каждой части посчитать crc32.
------------------ Нет ничего плохого в том, чтобы соорудить нечто и понять, что оно не работает. (хочу сделать универсальную систему учета для коммунальщиков, не важно на чем) |
Re: crc64 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Глубочайшее непонимание того что такое хэш, или (что по сути то же самое) контрольная сумма... ------------------ WBR, Igor |
© 2000-2024 Fox Club  |