Sys(2007 и странный CRC32

Разрабатываю интерфейс для работы со сторонним АПИ (ПРРО Украина).
Для определенных функций они требуют передачи контрольной суммы строки.
У них в документации приведен пример вычисления 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.
Текст кода:
[code]
cHashStr = "179625192271939,20082020,142338,10,4000002411,10,cdd68bb111f8993f3603f0179341571b35b73a07d5acee9b28fbfb714698e1b3"
nCRC32 = Val(Sys(2007, cHashStr, 0, 1))
If nCRC32 > 2^31 && получили Uint
nCRC32 = nCRC32 - 2^32 && -> INT, так как переворот возможен только для INT
EndIf
nCRC32 = CToBin(BinToC(nCRC32, '4S'), '4RS') && переворот
If nCRC32 < 0
nCRC32 = nCRC32 + 2^32 && -> UINT
EndIf
? Transform(nCRC32, '@0')
[/code]
ВОПРОС:
Я понимаю, что это подгонка под ответ, но другого решения я не нашел... Вот и хочется узнать Ваше мнение - всегда ли этот решение будет давать правильный результат? Или может все намного банальнее, и есть намного более простое решение?

0

Автор публикации

Пользователи не найдены
Оставить комментарий
Авторизация
*
*
Генерация пароля