**[**Back to NUMBERS SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**

`> I am learning `**Pascal and **don't understand something. How does the
> following **Function **make a Word into Hex:
It's Really doing two things, it's converting a binary value
into ascii, **and **from decimal **to **hex. Let's start With the
calling **or **main part **of **the **Program**. You're taking a 2 Byte
Word **and **breaking it up into 4 nibbles **of **4 bits each. Each **of
**these nibbles **is **displayed **as **a Single hex Character 0-F.
Hex Representation XXXX
||||
HexStr := HexStr + Translate(Hi(W) **shr **4); -----------||||
HexStr := HexStr + Translate(Hi(W) **and **15);------------|||
HexStr := HexStr + Translate(Lo(W) **shr **4); -------------||
HexStr := HexStr + Translate(Lo(W) **and **15);--------------|
Now the translate **Function **simply converts the decimal value **of
**the 4-bit nibble into an ascii hex value. **if **you look at an
ascii Chart you will see how this **is **done:
'0' = 48 '5' = 53 'A' = 65
'1' = 49 '6' = 54 'B' = 66
'2' = 50 '7' = 55 'C' = 67
'3' = 51 '8' = 56 'D' = 68
'4' = 52 '9' = 57 'E' = 69
'F' = 70
**As **you can see it easy **For **0-9, you just add 48 **to **the value **and
**it's converted, but when you go to convert 10 to A, you need to
use a different offset, so **For **values above 9 you add 55.
**Function **Translate(B : Byte) : Char;
**begin
if **B < 10 **then
**Translate := Chr(B + 48)
**else
**Translate := Chr(B + 55);
**end**;

**[**Back to NUMBERS SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**