Kbase P15650: To Convert a CHARACTER to HEXADECIMAL and VICE-VERSA
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  25/11/2003 |
|
Status: Unverified
GOAL:
To Convert a CHARACTER to HEXADECIMAL and VICE-VERSA
FACT(s) (Environment):
Operating System
FACT(s) (Environment):
Progress/WebSpeed Versions
FIX:
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.