Tengo que implementar una suma de verificación (CRC16 CCITT) para verificar el contenido de un archivo. La suma de comprobación es bastante simple de implementar en C o Java gracias a los operadores < < y >> y a los muchos ejemplos disponibles en la red.Cambio de bit cuando no hay ... operador de desplazamiento de bit
Lo que pasa es que ... mi cálculo de suma de comprobación debe implementarse en VBScript.
Mi experiencia con este lenguaje es casi nula pero desde mi entender, no hay nada provisto para hacer cambios de bit en VBScript. Por lo tanto, confío en multiplicaciones y divisiones por dos. Funciona bien excepto con valores negativos.
Realicé algunas pruebas y creo que VBScript maneja sus enteros de 16 bits con el complemento de dos.
Q1: ¿alguien puede confirmarme esto (complemento de dos en VBScript)? No encontré información precisa del sitio web de MSDN.
Q2: ¿Es posible hacer un cambio de bit (derecha e izquierda) con operaciones matemáticas simples cuando el número negativo está codificado con el complemento de dos?
.
Muchas gracias, me gustaría evitar un problema como tratar con enteros como matrices de '1' y '0' o llamar a alguna aplicación java/c de VBScript.
EDITAR gracias por la ayuda, encontrar a mi aplicación de un desplazamiento a la derecha en 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
Nota sobre el código anterior: valor era a veces excediendo los 16 bits, por lo tanto tenía que enmascarar el bits no utilizados para evitar el desbordamiento (AND 65535
).
Gracias tanto por la entrega de su código! Necesitaba exactamente lo mismo excepto 32 bits, lo cual era fácil de hacer con tu código. :) Estoy implementando CRC32. :) –