Sys(2007 и странный CRC32 | |
---|---|
StasKryzh Автор Сообщений: 14 Дата регистрации: 26.09.2009 |
Разрабатываю интерфейс для работы со сторонним АПИ (ПРРО Украина).
Для определенных функций они требуют передачи контрольной суммы строки. У них в документации приведен пример вычисления CRC32: cHashStr = "179625192271939,20082020,142338,10,4000002411,10,cdd68bb111f8993f3603f0179341571b35b73a07d5acee9b28fbfb714698e1b3" nCRC32: HEX = 0xbddbbda6, UInt = 3185294758 Пытаюсь на Фоксе получить crc32: nCRC32 = Val(Sys(2007, cHashStr, 0, 1)) Получаю: nCRC32: HEX = 0xA6BDDBBD, UInt = 2797460413 Пытаюсь использовать winAPI: Declare Integer RtlComputeCrc32 in ntdll.dll Integer, String, integer nCRC32 = RtlComputeCrc32(0, cHashStr, Len(cHashStr)) Получаю: Int = -1497506883 Перевожу в UInt (+2^32), и получаю тоже, что вернул Фокс: HEX = 0xA6BDDBBD, UInt = 2797460413 Видно, что в получаемые результаты - в HEX это зеркальное отображение того что в документации. Делаю переворот: (Int = -1497506883) nCRC32 = CToBin(BinToC(nCRC32, '4S'), '4RS') Перевожу в UInt, получаю результат - такой, как и в документации - nCRC32: HEX = 0xbddbbda6, UInt = 3185294758. Текст кода:
ВОПРОС: Я понимаю, что это подгонка под ответ, но другого решения я не нашел... Вот и хочется узнать Ваше мнение - всегда ли этот решение будет давать правильный результат? Или может все намного банальнее, и есть намного более простое решение? |
Re: Sys(2007 и странный CRC32 | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Уточните у них, как именно формируется контрольная сумма строки. Возможно вы и они вкладываете разный смыл. Примеры можно у них запросить? ------------------ "Veni, vidi, vici!"(с) Исправлено 1 раз(а). Последнее : sphinx, 28.11.20 22:29 |
Re: Sys(2007 и странный CRC32 | |
---|---|
StasKryzh Автор Сообщений: 14 Дата регистрации: 26.09.2009 |
Увы, но обратная связь с разработчиками ПО для Налоговой - это не для простых смертных... Спасибо им и за пример предоставленный в документации. И если бы не зеркальность результатов - то можно было бы подумать, что у меня и у них CRC32 имеют совершенно разные смыслы... Тогда бы и пытался связаться и уточнять у них...
|
Re: Sys(2007 и странный CRC32 | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Пишите в ЛС. Все, что по теме, как есть и как надо, какие требования. Свои примеры. Часть переписки. Если секретно и не для всех. Данные можно порезать, но 2-3 строки надо.
Если НЕ секретно - сюда выкладывайте, люди отзывчивые здесь. ------------------ "Veni, vidi, vici!"(с) |
Re: Sys(2007 и странный CRC32 | |
---|---|
_vit Сообщений: 5173 Дата регистрации: 29.07.2002 |
В цифровых системах используется два вида последовательностей байтов Big endian и Little endian.
Little endian используется в интеловских процессорах. Какие то системы могут использовать обратный порядок. Цитата: en.wikipedia.org Так что не удивительно. Исправлено 1 раз(а). Последнее : _vit, 28.11.20 23:24 |
Re: Sys(2007 и странный CRC32 | |
---|---|
StasKryzh Автор Сообщений: 14 Дата регистрации: 26.09.2009 |
Вы меня неправильно поняли... Я имел ввиду - контактов для обратной связи просто нету... |
Re: Sys(2007 и странный CRC32 | |
---|---|
StasKryzh Автор Сообщений: 14 Дата регистрации: 26.09.2009 |
Спасибо! Идея понятна. Получается я уже реализовал преобразование между BE и LE ))) Остается надеяться что правильно )) |
Re: Sys(2007 и странный CRC32 | |
---|---|
vasilenko_timur91 Сообщений: 1 Дата регистрации: 18.12.2020 |
Здравствуйте.
Тоже занимаюсь этим вопросом (ПРРО), только на PHP. Ваша идея с обращением шестнацатеричного числа у меня тоже заработала, спасибо за наводку. Мне прислали из поддержки налоговой их алгоритм расчёта CRC32 - вставлю его тут, может кому-то чем-то поможет. Ответ на контрольный пример в коде [i]Исправлено 2 раз(а). Последнее : vasilenko_timur91, 18.12.20 15:19 |
© 2000-2024 Fox Club  |