Consultor Eletrônico



Kbase 16053: To Convert a CHARACTER to HEXADECIMAL and VICE-VERSA
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   10/05/1998
To Convert a CHARACTER to HEXADECIMAL and VICE-VERSA


Following are 2 programmes, One converts a printable character into
Hexadecimal value. The other converts any Hexadecimal Value to ASCII
value as well as character. Non printable values will show only the
ASCII value. These can be modified to suit your needs.

1. To convert a character to Hexadecimal.
Run hex.p from the procedure editor.
Enter any character <R>.
Hexadecimal is displayed in the format "0x55"

2. To convert Hexadecimal to ASCII & Character.
Run convhex.p from the procedure editor.
Enter a Hex value in the format "0x55" <R>
ASCII and Character are displayed.

/* hex.p */

DEF VAR getchar AS CHAR FORMAT "x(1)" LABEL "Character".
DEF VAR asc-value AS INT.
DEF VAR q AS INT.
DEF VAR rem AS INT.
DEF VAR c AS CHAR.
DEF VAR r AS INT.
DEF VAR hx AS CHAR FORMAT "x(4)" LABEL "Hexadecimal".

REPEAT:
UPDATE getchar.
IF getchar = ? THEN getchar = "?".
asc-value = ASC(getchar).

rem = asc-value MODULO 16.
q = ( asc-value - rem ) / 16.
IF rem GE 10 THEN DO:
r = rem MODULO 10.
c = KEYLABEL(KEYCODE("A") + r).
END.
ELSE c = STRING(rem).
hx = "0x" + STRING(q) + c.
DISP hx.
END.


/* convhex.p */

DEF VAR charset AS CHAR FORMAT "x(1)" LABEL "Character".
DEF VAR asc-value AS INT label "ASCII".
DEF VAR rem AS INT.
DEF VAR r AS INT.
DEF VAR hx AS CHAR FORMAT "x(4)" LABEL "Hexadecimal".
DEF VAR str AS CHAR.

REPEAT:
UPDATE hx
VALIDATE( hx BEGINS "0x", 'Must supply Hexadecimal in the 0x format e.g.0x55 ') HELP "Enter a Hexadecimal Value".

str = SUBSTRING(hx,3,1).
asc-value = INT(str) * 16.

str = CAPS(SUBSTRING(hx,4,1)).
IF str GE "A" THEN DO:
r r = KEYCODE(str) - KEYCODE("A").
rem = 10 + r.
END.
ELSE rem = INT(str).
asc-value = asc-value + rem.
charset = CHR(asc-value).
DISP asc-value charset.
END.

Progress Software Technical Support Note # 16053