Мне нужно реализовать контрольную сумму (CRC16 CCITT )для проверки содержимого файла.. Контрольную сумму довольно просто реализовать на C или Java благодаря операторам << и >> и множеству примеров, доступных в сети.
Дело в том, что вычисление моей контрольной суммы должно быть реализовано на VBScript.
Мой опыт работы с этим языком почти нулевой, но, насколько я понимаю, в VBScript нет ничего для смещения битов. Поэтому я полагаюсь на умножение и деление на два. Это работает хорошо, за исключением отрицательных значений .
Я провел несколько тестов и считаю, что VBScript обрабатывает свои 16-битные целые числа с дополнением до двух.
Q1:может ли кто-нибудь подтвердить мне это (дополнение до двух в VBScript )? Я не нашел точной информации на сайте MSDN.
Q2:Можно ли выполнить битовый сдвиг (вправо и влево )с помощью простых математических операций, когда отрицательное число закодировано с дополнением до двух?
.
Большое спасибо, я действительно хотел бы избежать путаницы, такой как работа с целыми числами как массивами «1» и «0» или вызов какого-либо приложения java/c из VBScript.
РЕДАКТИРОВАТЬ спасибо за помощь, найдите ниже мою реализацию сдвига вправо в VBScript:
Function rightShift(value,bits)
Dim res
res = 65535 AND value
If value>=0 Then
res = res \ (2^bits)
Else If value=-1 Then
res = rightShift(res + 32768, bits - 1)
Else
res = rightShift(value \ 2 + 32768, bits - 1)
End If
End If
rightShift = res AND 65535
End Function
Примечание о приведенном выше коде :значение иногда превышало 16 бит, поэтому мне пришлось маскировать избежать переполнения(AND 65535
).