¿Alguien es tan amable de decirme si esta función que he creado es cómo se obtiene el checksum de una cadena?
)
Hola basesoft.
Velneo ya dispone de funciones para calcular Checksum de cadenas de caracteres.
https://doc.velneo.es/funciones-de-códigos.html
Aunque por supuesto puedes tener tu propia función Checksum personalizada.
Saludos
Paco Satué
Gracias, Paco, pero no encuentro entre las funciones de código ninguna que simplemente haga una suma XOR.
La necesito para completar un comando de una balanza (Protocolo Tisa ) para una comunicación bidireccional por un puerto serie.
.
Hola basesoft.
La suma XOR de la cadena coge cada caracter de la Cadena y aplica la función Binaria XOR entre ellos.
No le veo mayor misterio.
Prueba este ejemplo:
Rem ( Calcula el Checksum como la suma XOR de los caracteres de una cadena )
Pedir dato ( "Introduzca la Cadena", CADENA_TEXTO, Texto, "Cadena para calcular el Checksum XOR", )
Set ( NVALOR, 0 )
Set ( CLISTA_BIN, "" )
Recorrer buffer ( CADENA_TEXTO, CVALOR )
Set ( CLISTA_BIN, CLISTA_BIN + "\c" + CVALOR + "\c b" + rightJustified(numberToStringBin(getLatin1CharCode(CVALOR)), 8, "0") + " h" + numberToStringHex(getLatin1CharCode(CVALOR)) + "\n" )
Set ( NVALOR, binaryXOR(NVALOR, getLatin1CharCode(CVALOR)) )
Libre
Mensaje ( "Suma XOR de la cadena de Texto\n" + CLISTA_BIN + "\n\nResultado:\n" + "\c" + getLatin1Char(NVALOR) + "\c b" + rightJustified(numberToStringBin(NVALOR), 8, "0") + " h" + numberToStringHex(NVALOR) , Información, , )
Obtienes al final el valor getLatin1Char(NVALOR) con el caracter Checksum después del XOR.
Saludos
Paco Satué
Gracias, Paco: Mi despiste es que en la descripción de la función dice
binaryXOR( entero1, entero2 )
Y dudaba del significado de entero1 y entero 2
Bien, en mi función, la primitiva, los “enteros2” los sustituyo por el valor de código ascii
para el codec ISO-8859-1 (incluso las cadenas a sumarXOR no pasarán de caracteres ASCII)
Tú utilizas Latín1, es parecido)
Me faltó en mi función el reconvertir el último XOR al carácter correspondiente
Muchas gracias, repito: Tú siempre tan disponible
Juan Figueroa
He aquí la nueva versión de la función CHECKSUM(Cadena)
Juzgarla con benevolencia, pero juzgarla (por favor)