Anuncio
Colapsar
No hay anuncio todavía.
Pregunta sobre el checksum CRC16
Colapsar
X
-
Acá te paso este código, espero que te sirva!!
Código:function zsy_crc16. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(I_BLOCK) TYPE CHAR256 *" REFERENCE(I_DETAIL) TYPE CHAR1 OPTIONAL *" EXPORTING *" REFERENCE(E_KEY) TYPE STRING *"---------------------------------------------------------------------- * Original code in Clipper: * STATIC FUNCTION syscrc(bloc) * LOCAL lsb,msb,n,x,vint * STORE CHR(255) TO lsb,msb * FOR n := 1 TO 256 * x := CHARXOR(SUBSTR(bloc,n,1),msb) * x := CHARXOR(x,CHR(INT(ASC(x) / 16))) * vint := CHARXOR(lsb,CHR(INT(ASC(x) / 8))) * msb := CHARXOR(vint,CHR((ASC(x) * 16) % 256)) * lsb := CHARXOR(x,CHR((ASC(x) * 32) % 256)) * NEXT * lsb := CHARXOR(lsb,CHR(255)) * msb := CHARXOR(msb,CHR(255)) * RETURN NTOC(ASC(msb),16,2,"0") + NTOC(ASC(lsb),16,2,"0") lsb = c_chr255. msb = c_chr255. do 256 times. pos = sy-index - 1. w_ascii = i_block+pos(1). call function 'URL_ASCII_CODE_GET' exporting trans_char = w_ascii importing char_code = w_char. w_hex = w_char. x = w_hex bit-xor msb. x_dec = x. w_dec = trunc( x_dec / 16 ). w_hex = w_dec. y = x bit-xor w_hex. y_dec = y. w_dec = trunc( y_dec / 8 ). w_hex = w_dec. vint = lsb bit-xor w_hex. vint_dec = vint. w_dec = ( y_dec * 16 ) mod 256. w_hex = w_dec. msb = vint bit-xor w_hex. msb_dec = msb. w_dec = ( y_dec * 32 ) mod 256. w_hex = w_dec. lsb = y bit-xor w_hex. lsb_dec = lsb. if not i_detail is initial. write:/ sy-index,x_dec,y_dec,vint_dec,msb_dec,lsb_dec. endif. enddo. lsb = lsb bit-xor c_chr255. msb = msb bit-xor c_chr255. lsb_char = lsb. msb_char = msb. concatenate msb_char lsb_char into e_key. endfunction.
Dejar un comentario:
-
Pregunta sobre el checksum CRC16
Hola chicos!!
este es mi primer post y ya empiezo con una pregunta quizá un poco boba ....
existe alguna función para calcular el checksum CRC16
Gracias a todos!Etiquetas: Ninguno
Dejar un comentario: