我必须实现校验和(CRC16 CCITT)来验证文件的内容。由于 << 和 >> 运算符以及网上提供的许多示例,校验和在 C 或 Java 中实现起来相当简单。
问题是……我的校验和计算必须在 VBScript 中实现。
我对这种语言的体验几乎为零,但据我了解,没有任何东西可以在 VBScript 中进行位移。因此,我依赖于乘法和除以二。它工作得很好,除了负值。
我进行了一些测试,我相信 VBScript 用二进制补码处理它的 16 位整数。
Q1:有人可以证实我这一点(VBScript 中的二进制补码)吗?我没有从 MSDN 网站上找到任何准确的信息。
Q2:当负数用二进制补码编码时,是否可以通过简单的数学运算进行位移(左右)?
.
非常感谢,我真的很想避免像处理整数作为'1'和'0'的数组或从VBScript调用一些java / c应用程序这样的混乱。
编辑感谢您的帮助,在下面找到我在 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
)。