RE:SUMAR HEXADECIMAL
Publicado por
nestor (1 intervención) el 15/12/2008 02:34:08
Estoy en lo mismo, creo que no queda otra que convertir a decimal, ejecutar
la operacion en decimal y luego convertir a hexa nuevamente.
Lo bàsico es divisiones sucesivas por 16 tomando el residuo en orden inverso.
la conversion a decimal es multiplicar por 16 segun la posicion de cada digito por ejemplo :
compute Decimal = digito1 * 1 +
digito2 * 16 +
digito3 * 16 * 16 +
digito4 * 16 * 16 * 16...................
los digitos se toman con dos perform anidados buscando en la misma tabla hexa cada caracter.
NAM
* DATOS PARA CONVERSION DE LONGITUD A HEXADECIMAL X(4)
* -----------------------------------------------------
01 WI-I PIC 9(06) VALUE 0.
01 LONG-DEC PIC 9(06) VALUE 0.
01 DIVIDENDO PIC 9(06) VALUE 0.
01 COCIENTE PIC 9(06) VALUE 0.
01 RESTO PIC 9(06) VALUE 0.
01 TAB-HEXA PIC X(16) VALUE '0123456789ABCDEF'.
01 TABHEXA REDEFINES TAB-HEXA.
02 CHAR-HEXA PIC X(01) OCCURS 16.
01 SALIDA PIC X(04) VALUE SPACES.
* -----------------------------------------------------
CONVERTIR-A-HEXA.
*----------------*
MOVE 4 TO WI-I.
MOVE LONG-DEC TO DIVIDENDO.
DIVIDE DIVIDENDO BY 16 GIVING COCIENTE
REMAINDER RESTO
MOVE CHAR-HEXA (RESTO + 1) TO SALIDA (WI-I:1).
PERFORM DIVIDIR-POR-16 3 TIMES.
DIVIDIR-POR-16.
*--------------*
MOVE COCIENTE TO DIVIDENDO
DIVIDE DIVIDENDO BY 16 GIVING COCIENTE
REMAINDER RESTO
SUBTRACT 1 FROM WI-I.
MOVE CHAR-HEXA (RESTO + 1) TO SALIDA (WI-I:1).