¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Convertir valor decimal a hexadecimal en ABAP: ¿Módulo estándar o código personalizado rápido?

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 45 Vistas
0
Cargando...

Hola Expertos-

Tengo una necesidad (en ABAP) de poder convertir un valor decimal a su representación hexadecimal.

Tengo IDs de documentos como '189' y '192' y hay un archivo de imagen asociado a cada documento llamado '000000BD' y '000000C0.jpg' respectivamente. La C0 es la representación hexadecimal del decimal 192 y BD del 189.

¿Existe algún módulo de función estándar que pueda utilizar para determinar esto? Si no, ¿algún código personalizado rápido que puedas pensar?

Gracias,

- Vik.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Vik,

No veo la necesidad de un Módulo de Función en este caso. Como mencionó Kathir, una simple conversión de tipo hará el truco. Inserta un entero en un campo Hexadecimal y obtendrás lo que deseas.

Además, noto que varios de tus mensajes recientes no han sido cerrados. ¿Podrías marcarlos como respondidos, por favor?

Saludos,

Anand Mandalika.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola,

Espero que hayas resuelto tu problema. Si necesitas lo mismo en un módulo de función que devuelva un valor de tamaño 8

como has mostrado, es decir, 192 -> 000000C0, entonces creo que este código será útil.

FUNCTION Z_DECIMAL_TO_HEXA.

*"----


" "Interfaz local:

*" IMPORTING

*" VALUE(V_DECIMAL) TYPE I DEFAULT 0

*" EXPORTING

*" VALUE(V_HEXA_VALUE) TYPE CHAR8

*"----


data: v_hexa type x,

v_cnt type i.

v_hexa = v_decimal.

v_hexa_value = v_hexa.

v_cnt = strlen( v_hexa_value ).

v_cnt = 8 - v_cnt.

do v_cnt times.

concatenate '0' v_hexa_value into v_hexa_value.

enddo.

ENDFUNCTION.

Entonces, si se cumple tu requisito, por favor cierra este tema.

Gracias y saludos,

Kathir~

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Kathir,

Hay dos puntos que me gustaría mencionar aquí -

1. En tu fragmento de código, dado que v_deci es una variable entera, no deberías asignarle una cadena. Cuando dices

v_deci = '192'

Estás intentando convertir un literal de tipo carácter en un entero. Aquí no hay problema, no notarás ninguna diferencia y la conversión se realiza.

Pero el punto es que no hay necesidad de este tipo de conversión en este caso. Deberías estar usando -

v_deci = 192.

2. En tu código, si le doy un valor, digamos, 600 a v_deci, entonces la conversión fallará. El equivalente hexadecimal que obtendrás es 58. Lo cual es claramente incorrecto. En tu caso, v_hexa es capaz de contener un equivalente entero de hasta 256. para hacer las cosas más genéricas, debes usar...

data: v_hexa(4) type x,
      v_deci    type i.

la longitud se da como 4, porque se asume que un entero ocupa 4 bytes.

Saludos,

Anand Mandalika.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola,

Prueba este código.

REPORT ZC1_NUMBER_CONVERSION .

data: v_hexa type x,

v_deci type i.

v_deci = '192'.

v_hexa = v_deci.

write:/ 'Decimal :' , v_deci , ' = Hexa Decimal :' , v_hexa.

Obtuve el siguiente resultado,

Conversión de Números

Decimal : 192 = Hexa Decimal : C0

Espero que esto te ayude.

Saludos

Kathir~

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?